自定义字符串长度函数逻辑错误
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;
【讨论】:
以上是关于自定义字符串长度函数逻辑错误的主要内容,如果未能解决你的问题,请参考以下文章
Problem C: 指针:自定义函数length,调用它计算字符串的长度