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

来源:互联网 发布:职业选手训练软件 编辑:程序博客网 时间:2024/06/04 19:03

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; } 


0 0
原创粉丝点击