我编写了一个代码,用于计算句子中有多少单词,但在例如这样的情况下它不起作用:
"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);
}
答案 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;
}