C语言怎么多组输入字符串,到输入stop停止
#include <stdio.h>#include <stdlib.h>
#include <string.h>
int main()
{
char a;
char *p = {NULL};
char b;
memset(a, 0, sizeof(a));
gets(a);
// 去掉空格并统计字符串的长度
int i = 0;
int len = 0;
do
{
if (i == 0)
{
p = strtok(a, " ");
len = strlen(p);
}
else
{
p = strtok(NULL, " ");
if (p != NULL && strlen(p) > len)
{
len = strlen(p);
strcpy(b, p);
}
}
} while (p != NULL);
// 输出每个单词
int sum = 0;
i=0;
while (p != NULL)
{
// printf("%s\n", p);
sum += strlen(p);
// p = strtok(NULL, " ");
}
printf("%d %s", sum, b);// 最后输出
return 0;
}
样例输入:
My name is Amy
My name is Jane
stop 你的代码有几个错误和不完整的地方。首先,你声明的字符数组a应该是一个字符串数组而不是单个字符。其次,你需要在循环外部先声明并初始化字符指针p和另外一个字符串数组b。另外,在使用strcpy函数之前需要将目标字符串b初始化为零,以避免未定义行为。最后,在循环中的最后,你需要使用strtok函数将下一个单词读取到p中并更新计算结果。
以下是一个修复错误的示例代码:
#include <stdio.h>
#include <string.h>
int main()
{
char a;
char *p = NULL;
char b = {0};
int max_len = 0;
int sum = 0;
while (1) {
gets(a);
if (strcmp(a, "stop") == 0) {
break;
}
// 去掉空格并统计字符串的长度
p = strtok(a, " ");
while (p != NULL) {
int len = strlen(p);
sum += len;
if (len > max_len) {
max_len = len;
strcpy(b, p);
}
p = strtok(NULL, " ");
}
}
printf("%d %s\n", sum, b);// 最后输出
return 0;
}
在这个示例中,我们使用一个无限循环来读取多组输入字符串,并检查每个输入是否为"stop"来决定循环何时结束。在每个循环迭代中,我们使用strtok函数将输入字符串分割成单词,并对每个单词进行计算。我们还使用strcmp函数来比较输入与"stop"字符串是否相等。最后,我们输出总长度sum和最长单词b。请注意,为了确保b是一个字符串,我们在它的末尾加了一个空字符'\0'。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 #include <stdio.h>
#include <string.h>
int main(void)
{
char a ;
int i , k , m ;
for(m = 0 ;; m ++) {
gets(a) ;
if(! strcmp(a , "stop")) break ;
}
for(i = 0 ; i < m ; m ++) puts(a) ;
}
页:
[1]