自定义字符串长度函数逻辑错误

标签 c string logic

我正在为一个赋值创建我自己的字符串字长函数(嗯,它至少是赋值的一部分),但由于某种原因,我遇到了一个非常奇怪的错误。它应该给我一个字符串中的单词数,但由于某种原因,该值没有被保存。即使当我运行它时,它也说字符串的长度是 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;
}

Demo.

关于自定义字符串长度函数逻辑错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42869851/

相关文章:

c - unix 中的系统调用 : directories and files

javascript - 对象数组上的 Array.reduce() ——返回单个字母的字符串

string - 解析文件名中丢失的字符,就好像正在读取/斜杠字符一样

azure - 如何跟踪逻辑应用的状态代码

java - 难以导航与另一个 2d int 数组相关的 2d String 数组

c - 如何确定哪些目标文件实际上是链接所必需的?

c - cs50的copy.c文件实际上如何找到位图文件的正确部分?

python - 土耳其语字符编码

java - 计算关闭时间毫秒到时间

c - 错误消息 : undefined symbol _msize in C