下面是一个完全正确的代码,思路是直接找单词数。
如果说当前不遇到空格,那么意味着现在程序处于读单词的过程,如果说这个过程是头一次发生,那么处于读单词过程的次数加1。
如果说遇到空格,意味着现在程序处于读空格这个过程中,如果说上一个过程是读单词,那么flag=0表示目前不处于读单词状态。
#include<stdio.h>
int main(void)
{
int flag = 0; //flag=0表示目前没有接触到单词字符
char ch;
int word_count = 0;
while(scanf("%c",&ch)&&ch!='\n')
{
if(ch!=' '&&flag==0)
{
word_count++;
flag = 1;//接触到单词字符后,停止记录单词数
}
if(ch==' '&&flag==1)
{
flag = 0;
}
}
printf("%d", word_count);
return 0;
思路不同,导致flag的含义不同,可见思路决定了最终的结果。
下面这个是更简单的一种思路,所谓“单词”是指连续不含空格的字符串,各单词之间用空格分隔。
就两种情况,单词后面跟了一个空格,或者单词后面没有字符了。
根据这两种情况判断单词个数。当gets()函数不能用时可能多半是后面的代码错了,当然也可以使用 fgets()格式为
char *fgets(char *str, int n, FILE *stream);输入流的话直接用stdin,即 fgets(字符串, 大小, stdin);
#include <stdio.h>
int main() {
char a[1000];//初始化数组
gets(a);//赋值
int n,num=0,i;
for (i=0;a[i] != '\0';i++);//获取数组个数
n=i;
for (i=0;i<n;i++){
if (a[i] != ' ' && a[i+1] == ' ') num++;
if (a[i] != ' ' && a[i+1] == '\0') num++;
}
printf("%d\n",num);
return 0;
}