用C计算单词的最佳方法是什么?

时间:2009-07-10 14:39:12

标签: c algorithm

这是一个简单的计数字程序,我觉得非常有效。这是计算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);
         }     

7 个答案:

答案 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):

连字符:=' - '
alpha:='a'| 'b'| ...... | 'z'| 'A'| 'B'| ...... | 'Z'
alphagroup:= alpha | alpha alphagroup
hyphenword:= alphagroup hyphen alphagroup | alphagroup连字符连字符
字:= alphagroup |连字符

答案 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;
}