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

Posted

技术标签:

【中文标题】自定义字符串长度函数逻辑错误【英文标题】: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; 位置错误。 哦,谢谢。很抱歉。 【参考方案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;

【讨论】:

以上是关于自定义字符串长度函数逻辑错误的主要内容,如果未能解决你的问题,请参考以下文章

php自定义函数及内部函数----字符串处理函数

Problem C: 指针:自定义函数length,调用它计算字符串的长度

javaScript中自定义sort中的比较函数,用于比较字符串长度,数值大小

sas自定义标签可以包含多少字符

如何在c语言中计算字符串长度

自定义一个字符串函数,其功能是自动产生一个由字母和数字组成的任意位数的字符串,用java编写,求