计算句子中有多少单词 - 错误

时间:2014-12-07 17:58:26

标签: c

我编写了一个代码,用于计算句子中有多少单词,但在例如这样的情况下它不起作用:

"hello    world."

它需要返回有2个单词,但由于空格而返回4。这对每个单词之间的一个空格的情况唯一有用。这是我的代码:

int counthowmanywordsinasentence(char sentence[])// help forfunc7
{
    int count = 0, i;

    for (i = 0;sentence[i] != '\0';i++)
    {
        if (sentence[i] == ' ')
            count++;    
    }
    return (count+1);
}

6 个答案:

答案 0 :(得分:2)

使用旗帜。如果你遇到空间和标志未设置,设置标志和增量计数。如果遇到空间&标志已设置,只是忽略该情况。如果标志设置& char(即。[i])不是空格,重置标志。

答案 1 :(得分:1)

您可以通过此新版本安全地替换if

if (sentence[i] == ' ' && sentence[i+1] != ' ')

这意味着您将只计算每个空间序列中的最后一个空格。因此,在您的4个连续空格的情况下,您将只计算最后一个空格。

在这两种情况下,你仍然需要决定做什么:

" hello world."
"hello world "

在这两种情况下,你需要知道这些是否应该算作2或3个单词。

答案 2 :(得分:1)

这是所有答案中最简单的,只需添加2行

#include <stdio.h>
int counthowmanywordsinasentence(char sentence[])// help forfunc7
{
    int count = 0, i;

    for (i = 0;sentence[i] != '\0';i++)
    {
        if (sentence[i] == ' ')
            count++;  
        while (sentence[i] == ' ')
            i++;     
    }
    return (count+1);
}

答案 3 :(得分:1)

所以sscanf已经做了你需要的东西,它会在包含标签的字符串之前吃掉任意数量的空格。该算法对于前导或尾随空格是安全的。

int countHowManyWordsInASentence(char* sentence){
    int result = 0;
    int i = 0;

    while(sscanf(sentence, "%*s%n", &i) != EOF){
        sentence += i;
        result++;
    }
    return result;
}

sscanf非常多才多艺,你可以轻松地读出每个单词如下:

int countHowManyWordsInASentence(char* sentence){
    int result = 0;
    int size = strlen(sentence);

    if(size > 0){
        char* word = (char*)malloc((size + 1) * sizeof(char));

        for(int i = 0; sscanf(sentence, "%s%n", word, &i) > 0; sentence += i){
            result++;
        }
        free(word);
    }
    return result;
}

答案 4 :(得分:0)

你必须首先决定什么是单词:)让我们假设一个单词是具有至少一个字母字符(A-Za-z)的任何字符序列。那么你可以按照@ Abhilash的建议来完成你的代码。

int wordcount(char *sentence) {
  int count = 0;
  int is_word = 0;

  int i;
  for(i=0; sentence[i]!='\0'; i++) {
    if(isalpha(sentence[i])) {
      is_word = 1;
    }
    if(sentence[i] == ' ' && is_word) {
      count++;
      is_word = 0;
    }
  }

  return count + is_word;
}

答案 5 :(得分:0)

int counthowmanywordsinasentence(char sentence[])
{
    int count = 0, i;
    char ch, pre = ' ';

    for (i = 0; (ch=sentence[i]) != '\0'; i++, pre = ch)
    {
        if (pre == ' ' && ch != ' ')//reckon the rise
            count++;    
    }
    return count;
}