这是一个简单的计数字程序,我觉得非常有效。这是计算C中单词的最佳方法,还是这个程序有任何缺陷?
#include <stdio.h>
int CountWords(void);
main()
{
printf("count the words and enter string\n");
CountWords();
}
int CountWords(void)
{
char c;
int num=0;
int flag= 0;
while((c=getchar())!='\n')
{
if(c==' ')
{
flag=0 ;
}
else if(flag==0)
{
num++;
flag=1;
}
}
printf("Num is %d",num);
}
答案 0 :(得分:2)
此计划将使您的人数减少。这是因为您正在检查一个空格,以便在您的单词数量中添加一个空格。您认为字符串中的最后一个字会发生什么?
答案 1 :(得分:1)
我能想到的一点是,如果标点符号被空格包围,它会将标点符号计为单词。
E.g。
The quick - and lazy - fox.
将被报告为包含7个单词,尽管只有5个单词 您可能希望仅将单词字符集减少为字母数字字符,并将标点符号计为单词分隔符 - 除非它是单词中间的'或 - ,取决于您定义为单词的内容(它是和机智的单个单词?每个单词?)。
答案 2 :(得分:0)
初始化flag=1
,关闭一个错误应该消失。
答案 3 :(得分:0)
首先根据算法定义问题。例如,制作流程图。正如其他海报所做的那样,通过逻辑运行一些快速示例。在编写代码之前完成所有 。
然后,一旦您认为自己拥有最佳算法,请在C中写下。
想出一个问自己的问题清单,例如“什么是单词?”,“什么不是一个单词?”。
对于解析任何类型的文本或令牌,您可能有兴趣用Backus-Naur Form来表达您的想法。查看任何计算机语言规范,并注意它们如何定义类似标识符的内容。即使您不使用它来编写程序,也应该帮助您解决问题。
字词是否仅限于字母字符a-z和A-Z?连字符怎么样?
也许(不是正式的BNF):
连字符:=' - '答案 4 :(得分:0)
以下是可以改进该程序并且适用于所有条件的完整代码:
#include <stdio.h>
void CountWords(void);
void main()
{
printf("\n\tcount the words and enter string\n\n\n");
CountWords();
}
void CountWords(void)
{
char c;
int num=0;
int flag= 0;
while((c=getchar())!='\n')
{
if((c==' ')||(c==' ')||(c=='.')||(c==';')||(c==',')||(c==';')
||(c==':')||(c=='"')||(c=='?')||(c=='!')||(c=='-'))
{
flag=0 ;
}
else if(flag==0)
{
num++;
flag=1;
}
}
printf("\t\n\n\nNumber of words is %d\n",num);
}
/*By Md. azaz*/
答案 5 :(得分:0)
呸。代码太多了:
int numwords(char *str)
{ int n = 0;
for(str=strtok(str, " -.!,;"); str; str=strtok(NULL, " -.!,;"))
n++;
return n;
}
是计算c中单词的公然方式。 libc strtok()
经过高度优化。
答案 6 :(得分:0)
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define SIZE 100
int main()
{
char str[SIZE]={ '\0' };
int string_size;
int wordcount, found=0, other=0;
printf("Enter the string:");
fgets(str, SIZE, stdin);
string_size = strlen(str);
for(int i=0;i<=string_size;i++)
{
if(isalnum(str[i]) && !isalnum(str[i-1]))
found++;
}
printf("Number of words are:%d\n", found);
return 0;
}