我有一个代码,它打印字符串中最长的单词。
我需要它来打印这个字符串没有这个特定的字。希望你能帮助我,例如:输入:“最长单词”输出:“那个词”
#include <stdio.h>
#include <string.h>
void LongestWord(char string[100])
{
char word[20],max[20],min[20],c;
int i = 0, j = 0, flag = 0;
for (i = 0; i < strlen(string); i++)
{
while (i < strlen(string) && string[i]!=32 && string[i]!=0)
{
word[j++] = string[i++];
}
if (j != 0)
{
word[j] = '\0';
if (!flag)
{
flag = !flag;
strcpy(max, word);
}
if (strlen(word) > strlen(max))
{
strcpy(max, word);
}
j = 0;
}
}
printf("The largest word is '%s' .\n", max);
}
int main()
{
char string[100];
printf("Enter string: ");
gets(string);
LongestWord(string);
}
2条答案
按热度按时间8ftvxx2r1#
我尝试了一下,但我编辑了一些你已经有的东西,所以请注意评论:
不要使用
gets
。忘记它的存在。我使用的是fgets
。fgets
会将行结束符与字符串沿着复制,所以我改用isspace
,而不是专门查找' ' (32)
。我去掉了
flag
布尔值。这看起来像是(猜测,因为name是无用的)一个黑客,总是接受第一个单词作为最长的。与其在逻辑中间有一个黑客,不如让max
成为一个0长度的字符串。然后,它总是会通过“是这个更长”的测试。我们有了原始字符串,可以编辑它。我覆盖了
'\0'
的空格。现在你有了一个包含多个 embedded 字符串的数组。另外,我保存了一个指向最长单词的指针。当我们把字符串打印给用户时,我们可以只使用原始字符串。它被分成了单独的字符串,我们可以一个接一个地打印。当我们到达最长单词时,longest
将指向与&string[i]
相同的位置。我们需要做的就是跳过这一步...7y4bm7vi2#
另一个需要考虑的版本。尝试使用更少的变量。
编辑
最好使用标准库函数,而不是试图重新发明可用的功能(因为不熟悉)。
下面是上面的
func()
的一个更短的版本,处理零散的空格作为一个练习。