C 数一数句子中有多少个单词-what';这是不对的
我写了一个代码来计算一个句子中有多少个单词,但它在这样的情况下不起作用,例如:C 数一数句子中有多少个单词-what';这是不对的,c,C,我写了一个代码来计算一个句子中有多少个单词,但它在这样的情况下不起作用,例如: "hello world." 它需要返回2个单词,但由于空格的原因,它返回4个单词。它只适用于每个单词之间有一个空格的情况。这是我的代码: int counthowmanywordsinasentence(char sentence[])// help forfunc7 { int count = 0, i; for (i = 0;sentence[i] != '\0';i++) {
"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);
}
使用旗帜。如果遇到未设置空格和标志,请设置标志和增量计数。如果遇到空格并设置了标志,则忽略该情况。如果设置了标志&char(即句子[i])不是空格,则重置标志 使用标志。如果遇到未设置空格和标志,请设置标志和增量计数。如果遇到空格并设置了标志,则忽略该情况。如果设置了标志&char(即句子[i])不是空格,则重置标志 你必须先决定什么是单词:)让我们假设一个单词是至少有一个字母字符(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;
}
你必须先决定什么是单词:)让我们假设一个单词是至少有一个字母字符(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;
}
您可以安全地将
if
替换为此新版本:
if (sentence[i] == ' ' && sentence[i+1] != ' ')
这意味着您将只计算每个空间序列中的最后一个空间。因此,在4个连续空间的情况下,只计算最后一个
在这两种情况下,您仍然需要决定要做什么:
" hello world."
"hello world "
您需要知道在这两种情况下,这些词是否应算作2个或3个词。您可以安全地将
if
替换为此新版本:
if (sentence[i] == ' ' && sentence[i+1] != ' ')
这意味着您将只计算每个空间序列中的最后一个空间。因此,在4个连续空间的情况下,只计算最后一个
在这两种情况下,您仍然需要决定要做什么:
" hello world."
"hello world "
因为你需要知道在这两种情况下,这些都应该算作2个或3个单词。这是所有答案中最简单的,只需添加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);
}
#包括
int counthowmanywordsinasentence(char语句[])//函数7的帮助
{
int计数=0,i;
对于(i=0;句子[i]!='\0';i++)
{
如果(句子[i]='')
计数++;
while(句子[i]='')
i++;
}
返回(计数+1);
}
这是所有答案中最简单的,只需添加两行即可
#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);
}
#包括
int counthowmanywordsinasentence(char语句[])//函数7的帮助
{
int计数=0,i;
对于(i=0;句子[i]!='\0';i++)
{
如果(句子[i]='')
计数++;
while(句子[i]='')
i++;
}
返回(计数+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;
}
因此
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;
}
我不明白。。。你的“如果”如何可能?一句话[我]怎么可能值得“同时!”我的错,忘了在其中一个条件中添加“+1”我不明白。。。你的“如果”如何可能?一句话[我]怎么可能值得“同时!”糟糕,我忘了在其中一个条件中添加“+1”。代码的错误在于它计算的是空格,而不是单词。这就是为什么在返回之前需要添加1。但是像
“hello”
和“world”
这样的字符串,每一个字符串都包含一个空格会发生什么呢?代码的错误在于它计算的是空格,而不是单词。这就是为什么在返回之前需要添加1。但是像“hello”
和“world”
这样的字符串,每一个字符串都包含一个空格,会发生什么情况呢?@TamarKravitz一旦遇到空格,它就会将其算作一个新词。但是while循环在剩余的空格上运行并跳过它。@BhargavRao类似地回答这个问题,它不能处理前导空格。如果需要的话,这个词也不能返回0。@TamarKravitz一旦遇到空格,它会将其作为新词计算。但是while循环在剩余的空格上运行并跳过它。@BhargavRao类似地回答这个问题,它不能处理前导空格。如果需要,这个函数也不能返回0。isAlphabetic
已经实现,您只需要强制转换为int
:而且这个函数从不计算最后一个字。不知道:p我习惯了C中没有太多可用的内容。还修改了代码以计算最后一个字(我觉得它很难看,但很有效).isAlphabetic
已经实现,您只需将其转换为int
:而且此函数从不计算最后一个单词。不知道:p我习惯C中没有多少可用的。还修改了代码以计算最后一个单词(我发现它很难看,但很有效)。类似于这方面的其他答案,这与前导空格有关,但此解决方案也无法计算最后一个单词。与其他答案类似,这与前导空格有关,但此解决方案也无法计算最后一个单词。