我正在为一个赋值创建我自己的字符串字长函数(嗯,它至少是赋值的一部分),但由于某种原因,我遇到了一个非常奇怪的错误。它应该给我一个字符串中的单词数,但由于某种原因,该值没有被保存。即使当我运行它时,它也说字符串的长度是 21,“Happy go lucky charms”。谁能告诉我这里出了什么问题?
#include <stdio.h>
#include <ctype.h> // For the letter checking functions
int findLengthString( char *word){
int i = 0;
int length = 0;
for ( i = 0; word[i] != '\0'; i++){
length++;
}
printf("length is %d", length );
return length;
}
int totalWords(char *str) {
int i = 0;
int total = 0;
int hold = findLengthString(str);
for ( i = 0; i < hold; i++ ) {
if ( str[i] == ' ' || str[i+1] == '\0') {
printf("total is %d", total);
total++;
}
return total;
}
}
int main() {
int hold = 0;
char arr[] = "Happy go lucky charms";
hold = totalWords(arr);
printf("hold is %d", hold);
return 0;
}
最佳答案
直接的问题是 return
的位置不对。如果你正确地格式化你的代码,你会清楚地看到哪里出了问题:
int totalWords(char *str) {
int i = 0;
int total = 0;
int hold = findLengthString(str);
for ( i = 0; i < hold; i++ ) {
if ( str[i] == ' ' || str[i+1] == '\0') {
printf("total is %d", total);
total++;
}
return total; // <<== You return in the loop
}
// You should return here
}
但是,这是较小的问题。一个更大的问题是您的代码逻辑不正确:它不是计算单词,而是计算空格,所以像这样的字符串 "Hello, world!"
将产生 10 而不是 2。
要解决此问题,您需要更改算法,仅当您在最后一次增量后看到非空格时才将 1
添加到总数中:
int totalWords(char *str) {
int i = 0;
int total = 0;
int hold = findLengthString(str);
int inWord = 0;
for ( i = 0; i < hold; i++ ) {
if ( str[i] == ' ' || str[i+1] == '\0') {
total+= inWord;
inWord = 0;
} else {
inWord = 1;
}
}
printf("total is %d", total);
return total;
}
关于自定义字符串长度函数逻辑错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42869851/