gpt4 book ai didi

arrays - 写一个C函数,接受一个英文句子作为参数,返回句子中最长的单词

转载 作者:行者123 更新时间:2023-12-04 15:05:44 25 4
gpt4 key购买 nike

我有一个作业要求我编写一个函数来接收包含英语句子的数组并返回该句子中最长单词的长度。这是我到目前为止的代码:

int longWordLength(char *s); // Function prototype

int main() {
char str[80], *p;

printf("Enter a string: \n");
fgets(str, 80, stdin);

if (p = strchr(str,'\n'))
*p = '\0'; //converts newline to null

printf("longWordLength(): %d\n", longWordLength(str));
return 0;
}

int longWordLength(char *s) {
int count = 0, max = 0;
while (*s++ != '\0') {
if ((*s >= 'a' && *s <= 'z') || (*s >= 'A'&& *s <= 'Z')) {
count++;
} else {
if (count > max) {
max = count;
count = 0;
} else
count = 0; // word is not the longest
}
}
return max;
}

我已经尝试了很长时间来诊断问题,但无济于事。

这适用于某些测试用例,例如:

测试用例 1:

Enter a string:  
I am happy.
longWordLength(): 5

但是对于像这样的测试用例测试用例 4:

Enter a string:  
Hello
longWordLength(): 4 <- it prints 4 instead of 5.

我不允许使用除 <string.h> 以外的任何库因为这是我的学校作业。就我的问题寻求任何人的指导,因为我似乎真的无法弄清楚这个问题。先谢谢你。

最佳答案

问题出在 while (*s++ != '\0') { 中:您在测试它指向的字符之前递增字符串指针。只需将代码更改为:

    for (; *s != '\0'; s++) {
...

但是请注意,如果最后一个单词后面没有跟一些分隔符(例如空格或换行符),则不会测试最大长度。

请注意,longWordLength() 不需要去除尾随的换行符来确定正确的计数。

修改后的版本:

#include <stdio.h>

int longWordLength(const char *s); // Function prototype

int main() {
char str[80];

printf("Enter a string: \n");
if (!fgets(str, sizeof str, stdin))
return 1;

// no need to strip the newline for this test:
printf("longWordLength(): %d\n", longWordLength(str));
return 0;
}

int longWordLength(const char *s) {
int count = 0, max = 0;
for (;; s++) {
if ((*s >= 'a' && *s <= 'z') || (*s >= 'A'&& *s <= 'Z')) {
count++;
} else {
if (count > max) {
max = count;
}
if (*s == '\0')
break;
count = 0; // reset the counter for the next word
}
}
return max;
}

关于arrays - 写一个C函数,接受一个英文句子作为参数,返回句子中最长的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66172652/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com