lsmCC 发表于 2023-12-29 18:43:39

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

FishC 发表于 2023-12-29 18:43:53

你的代码有几个错误和不完整的地方。首先,你声明的字符数组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 小助理,如未能正确解答您的问题,请继续追问。

jackz007 发表于 2023-12-29 19:23:19

#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]
查看完整版本: C语言怎么多组输入字符串,到输入stop停止