C语言单词个数

int main()
{ char str[1000];
int i,j,count=0,word=0;
gets(str);
for(i=0;str[i]!='\0';i++)
{ count=0;
if(str[i]==' ')
{ j=i;
for(;str[j]!=' ';j++)//判断连续空格的问题
if(str[i]==' ')
count++;
}
if(count>=1)
word++;
}
printf("个数%d",word);
return 0;
}
请问哪里出错了
word个数一直都是0

问题1:

   你是想这样:
   从空格 i 处, 往后依次寻找, 找到第一个不是空格的 j ,找到则count++
   但实际效果是: 
   若 j 处不为空格,继续; 若 j 处为空格,结束for循环
   由于 j = i;  所以for循环开始时 str[j] == ' ',所以会结束循环,所以count一直为0,word也永远不会++,这就是原因所在
     
问题2
  就算上面的代码你改OK了,但是还有一个问题你没注意
  从空格 i 处, 找到不是空格的 j 了,OK,
  但是下一个 i,居然是i++,
  请问按你这种算法,
  那 "are---ok\0"(用符号"-"代替空格),岂不是第一个单词被计数三次了?
  所以下一个i, 应该先 i = j, 再 i++

 

改法:(当然也有其他改法, 末尾判断字符串结尾处可能还有问题)
 
 #include "stdio.h"
 int main()
 { 
  char str[1000];
  int i, j, count = 0, word = 0;
  gets(str);
 
  for( i = 0; str[i] != '\0'; i++)
  {
           count = 0;
           if(str[i] == ' ')
           {
                    j = i; 
                    for( ; str[j] == ' ' ; j++)
                    {
                             count++;
                    }
   
                    if(count >= 1)
                    {
                             word++;
                             i = j-1;
                    }     
           }
  }
   
       printf("个数%d",word);   
       return 0;
 }

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-07-17
没注意,但不太多
第2个回答  2012-07-17
头文件缺少
在最上面添上:#include "stdio.h"
就不报错了追问

我头文件当然写了 只是提问没写出来

追答

那你是想问怎么改?
请问哪里出错了——我没看你的代码,只是运行了一下

追问

word一直都是0

追答

#include "stdio.h"
int main()
{
char str[1000];
int i,j,count=0,word=0;
gets(str);
for(i=0;str[i]!='\0';i++)
{
// count=0;
if(str[i]==' ')
{
// j=i;
// for(;str[j]!=' ';j++)//判断连续空格的问题
// if(str[i]==' ') //没看明白你这儿像干嘛,只是统计空格的话,根本没这么麻烦
// count++;
// }
// if(count>=1)
word++;
}
}
printf("个数%d",word);
return 0;
}

说明白你想要什么结果~~我才好写代码

追问

for(i=0;str[i]!='\0';i++)
{
// count=0;
if(str[i]==' ')
{
// j=i;
// for(;str[j]!=' ';j++)//判断连续空格的问题
// if(str[i]==' ') //没看明白你这儿像干嘛,只是统计空格的话,根本没这么麻烦
// count++;
// }
// if(count>=1)
word++;
}
统计空格啊 有空格就标记count+1 如果count大于1了 那单词数就+1 看不懂么??

第3个回答  2012-07-17
int main()
{ char str[1000];
int i,j,count=0,word=0;
gets(str);
for(i=0;str[i]!='\0';i++)
{
count=0,
if(str[i]==' ')
{ j=i;
for(;str[j]==' ';j++);//判断连续空格的问题

count++;
}
if(count>=1)
word++;
}
printf("个数%d",word);
return 0;
}追问

那句if的确有点多余 但是删不删除对结果没改变

追答

int main()
{ char str[1000];
int i,j,count=0,word=0;
gets(str);
for(i=0;str[i]!='\0';i++)
{
count=0;
if(str[i]==' ')
{ j=i;
for(;str[j]==' ';j++);//判断连续空格的问题

count++;
}
if(count>=1)
word++;
}
printf("个数%d",word);
return 0;
}
这样还有问题?你能输入吗?

第4个回答  2012-07-17
int main()
{ char str[1000];
int i,j,count=0,word=0;
gets(str);
j = strlen(str);//这里改成strlen获取长度,如果用原来的方法,我的第二个while循环会出错
for(i=0;i<j;i++){
while(str[i++]==' ');//过滤空格,行首空格,行尾空格,词中间的空格
count = 0;
while(i<j && str[i++]!=' '){ // 判断长度不超出总字符数,且不遇到空格

count++;
}
if(count >= 1)
word++;
}
printf("个数%d",word);
return 0;
}
我这样写测了几个样例没错,楼主可参考
第5个回答  2012-07-17
加个头文件<string.h>,然后用strlen(str);直接求长度吧。

【C语言程序设计】C语言统计单词个数,单词个数算法
统计英文文章中的单词数,可采用读取内容并统计空格数量的方法。程序识别空格,空格数+1即为单词总数。以“I love China”为例,统计结果为3个单词;以“I love Xichang College”为例,统计结果为4个单词。此方法简洁高效,适用于快速准确统计英文文章单词数量。在C语言中,字符串常量通过字符数组实现,...

C语言程序设计:输入一行字符,统计出其中单词的个数,个单词之间用空格分...
为了统计一行字符中的单词个数,我们可以编写一个简单的C语言程序。首先,我们需要定义一个足够大的字符数组来存储输入的字符串。接下来,我们要求用户输入一行字符,并在输入结束时按回车键。程序将统计并输出单词的数量。下面是一个示例程序,用于实现上述功能:include int main() { char str[100];pri...

C语言 计算单词个数!
printf("本行中共有%d个单词.\\n",num);} 这个是比较简单的写法。

C语言输入一段英文要求统计出这段英文的单词数,字符数,行数
isalnum(c))\/\/如果不是单词就把单词数+1nw++; else \/\/如果是单词 就把字符数+1 nc++;}printf("character=%d\\nlines=%d\\nwords=%d\\n",nc,nl,nw);}

C语言程序设计,输入一个英文句子,统计单词的个数。
在C语言程序设计中,一个基本的任务是统计输入的英文句子中的单词数量。以下代码片段展示了如何实现这一功能:首先,你需要在程序中包含必要的头文件,如, , 和,以使用标准输入输出和字符串处理功能。在main()函数中,定义一个字符数组string来存储用户输入的英文句子,以及几个变量来辅助统计:一个整数...

C语言统计单词个数,单词个数算法
当字符从' '变为字母时或其他字符时word从0变为1,而word从0变为1时就是一个单词,所以count+1;当字符由非' '变为' '时word从1变为0,准备判断下一个单词的出现,即等待字符由' '变为其他字符的出现。这样最后count就是记录了单词的个数,其实就是记录了字符由' '变为其他字符的次数!

C语言统计单词个数
‘\\0’和‘0’的区别: 在c语言中,它们都是字符,都用对应的ASCII码来存储。例如第一个ASCII码,0,对应字符为(Null),就是 ‘\\0’,即空字符。我们在c语言中判断一个字符串是否结束的标志就是看是否遇到‘\\0’,如果遇到‘\\0’,则表示字符串结束。字符‘0’和数字0的区别:前者是字符常量...

C语言统计该文本中 英语单词的个数 ?
int n =0;while(!feof(fp)){ fgets(en[n++], N, fp); \/\/输入英语短文 } for(i=0;i<n;i++){ state=0; \/\/设每行的开始都是单词的开始 for(j=0;en[i][j]!='\\0';j++){ if(en[i][j]==' '){ state=0; \/\/判断 en[i][j] 是否为空格字符 ...

C语言程序设计,输入一个英文句子,统计单词的个数。
char c;int i,num=0,sum=0,word=0;\/\/定义word用来指示一个单词是不是结束或新单词是否开始;printf("请从键盘输入一行需要查询的英文句子,进行单词数量统计:\\n\\n");gets(string);\/\/从键盘获得输入的字符串;\/\/以下统计句子中的英文字符个数;for(i=0;(c=string)!='\\0';i++)\/\/for循环...

C语言统计单词个数
核心思想是通过一个flag,来确定单词的起始, 每出现一个单词的起始,则表示存在一个单词。 这样统计出现的单词起始个数,即可获得单词总数。1、flag初始为1;2、遍历字符串。3、对于每个字符,如果出现非空格字符,且flag为1,则为单词起始,累加计数器。同时赋值flag为0。4、在flag为0情况下,如果...

相似回答