题目描述
输入一行字符,统计并输出其中有多少个单词,单词之间用空格分隔。
输入
只有一行,保证只包含可见字符,且此行的所有字符数不超过100。
输出
一个整数,表示输入的一行字符*有多少个单词。
请注意行尾输出换行。
样例输入
I am a program.
样例输出
4
1 #include<iostream> 2 #include<cstdio> 3 #include<string.h> 4 using namespace std; 5 int main(){ 6 char str[110]; 7 while(NULL!=fgets(str,110,stdin)){ 8 int len=strlen(str); 9 int flag=1,count=0; 10 for(int i=0;i<len-1;i++){ 11 if(str[i]!=' '&&flag==1){ 12 flag=0; 13 count++; 14 } 15 if(str[i]==' '&&flag==0){ 16 flag=1; 17 } 18 } 19 printf("%d\n",count); 20 } 21 return 0; 22 }
Mist Note:代码没事多看看,觉得写的还是比较简单的,这里有一个之前没有注意的问题,fgets函数的用法。
fgets只能读取N-1个字符,包括最后的'\n',读完结束后系统将自动在最后加'\0'(gets读完结束后系统自动会将'\n'置换成'\0')。
说到这里就有俩种情况了:
一:当你从键盘上输入<=N-1个字符(包括'\n')时,那么字符串str会以‘\n\0’结尾。这就造成了strlen(str)比你想象的大 1 ,
当然你可以通过下面代码将'\n'去掉。
1 if(str[strlen(str) - 1] == '\n') { // 去掉换行符 2 str[strlen(str) - 1] = '\0'; 3 }
二:当你从键盘上输入>N-1个字符(包括'\n')时,那么字符串str会以'\0'结尾。