WOJ:Starter:1046 - BONUS#4 - 统计字符

gets()函数不能控制输入的长度,例如

  char str[100];

  gets(str);

如果用户输入10000个字符,情况会怎样呢?很显然,数组越界,程序很可能会崩溃,并且还有受到恶意输入导致遭受溢出攻击的风险。

可用的替代函数是 fgets, 原型类似于

  char * fgets(const char *str, unsigned maxlen, FILE *fp);

例如  fgets(str, 100, stdin); 这样可以限制,输入的字符(包括末尾的'\0')不会超过100个,可以放心使用。

但是该函数与gets另一个不同的地方是,用户输入的回车并不会被吃掉,而是会原样存放在字符串中,需要特别注意。

p.s. 上面给出的例子中, stdin 是C语言预定义的一个 FILE * 类型的变量,对应于“标准输入”,默认情况下就是来自键盘的输入。


利用字符串的值作为数组下标,实现字符出现次数的统计


#include<stdio.h>
 #include<stdlib.h>
 #include<string.h>
 int main(){
     char words[10],str[1010];
     char count[256];//ASCII码
     int i; 
     while(1){
         fgets(words,10,stdin);
         fgets(str,1010,stdin);
         if(words[0]=='#') 
             break;
         for(i=0;i<256;i++)
             count[i]=0;
         for(i=0;str[i];i++){
             count[str[i]]++;
         }
         for(i=0;words[i];i++)
             if(words[i]!='\r'&&words[i]!='\n')
                 printf("%c %d\n", words[i], count[words[i]]);
     }
     return 0;
 } 


全部评论

相关推荐

07-07 11:33
江南大学 Java
已经在暑假实习了&nbsp;,没有明确说有hc,纠结实习到八月份会不会有点影响秋招毕竟感觉今年好多提前批
程序员小白条:92的话准备提前批,其他没必要,没面试机会的,而且你要准备充分,尤其八股和算法题
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务