【问题标题】:Custom string length function logic error自定义字符串长度函数逻辑错误
【发布时间】:2017-08-09 17:44:08
【问题描述】:

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

标签: c string logic


【解决方案1】:

直接的问题是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.

【讨论】:

    【解决方案2】:
    #include <stdio.h>
    

    包括

    包括

    int totalWords(char str[]) {

    int i = 0;
    int total = 0;
    int hold = strlen(str);
    

    for ( i = 0; i

       if ( str[i] == ' ' || str[i+1] == '\0') {
            printf("total is %d\n", total);
            total++;
          }
     }    
    return total;
    

    }

    int main() {

    int hold = 0;
    char arr[] = "Happy go lucky charms";
    
    hold = totalWords(arr);
    
    
    printf("hold is %d", hold);
    

    返回 0; }

    【讨论】:

      猜你喜欢
      • 2011-05-17
      • 1970-01-01
      • 2020-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多