1219: 统计字符串的单词个数

题目描述

输入一行字符,统计并输出其中有多少个单词,单词之间用空格分隔。

输入

只有一行,保证只包含可见字符,且此行的所有字符数不超过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'结尾。

 
上一篇:SDNU 1219.sign up problem


下一篇:控制台光标: 隐藏光标