C语言输出最长的单词


#include<stdio.h>
#include<string.h>
int main()
{
int alphabetic(char);
int longest(char[]);
int i;
char line[100];

gets(line);
printf("The Longest word is: ");
for(i=longest(line);alphabetic(line[i]);i++)
printf("%c",line[i]);
printf("\n");
return 0;
}
int alphabetic(char c)
{
if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))
return(1);
else
return(0);
}
int longest(char string[])
{
int len=0,i,length=0,flag=1,place=0,point;
for(i=0;i<=strlen(string);i++)
if(alphabetic(string[i]))
if(flag)
{
point=i;
flag=0;
}
else
len++;
else
{
flag=1;
if(len>=length)
{
length=len;
place=point;
len=0;
}
}
return(place);
}

修改如下,供参考:

#include<stdio.h>
#include<string.h>
int main()
{
    int alphabetic(char);
    int longest(char[]);
    int i,j,k=0,maxlen,length=0,flag=1,place=0,point;
    char line[100];

    gets(line);
    maxlen = longest(line);
    printf("The Longest word is: ");
    for(j=0;line[j];j++)
    {
        if(alphabetic(line[j])){
            if(flag)
            {
                point=j;
                flag=0;
            }
            length++;
        }
        else
        {
            flag=1;
            if(maxlen == length)
            {
                if (k++) printf(" ");
                for(i=point;alphabetic(line[i]);i++)
                     printf("%c",line[i]);
            }
            length=0;
        }
    }
    if(maxlen == length)
    {
        if (k++) printf(" ");
        for(i=point;alphabetic(line[i]);i++)
            printf("%c",line[i]);
    }
    printf("\n");
    return 0;
}
int alphabetic(char c)
{
    if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))
        return(1);
    else
        return(0);
}
int longest(char str[])
{
    int len=0,i=0,length=0,flag=1,place=0,point;
    for(i=0;str[i];i++)
    {
        if(alphabetic(str[i]))
        {
            if(flag)
                flag=0;
            len++;
        }
        else
        {
            flag=1;
            if(len > length)
                length=len;
            len=0;
        }
    }
    if (len > length)  length=len;
    return length; //return(place);
}


#include <stdio.h>
#include <string.h>

int main() {
  // 定义字符串数组
  char words[][10] = {"Hello", "World", "This", "Is", "A", "Test"};

  // 定义最长单词的长度和下标
  int max_length = 0;
  int max_index = 0;

  // 遍历字符串数组中的每个单词
  for (int i = 0; i < 6; i++) {
    // 使用 C 库函数 strlen() 获取单词的长度
    int length = strlen(words[i]);
    // 如果单词的长度大于最大长度,则更新最大长度和下标
    if (length > max_length) {
      max_length = length;
      max_index = i;
    }
  }

  // 输出最长的单词
  printf("最长的单词是:%s\n", words[max_index]);

  return 0;
}

以下为详细解答,望采纳

可以在 longest 函数里面增加一个新的变量来记录最长单词的起始位置的个数,然后在找到更长的单词时把记录的起始位置的个数清零。然后在输出最长单词的时候,根据记录的起始位置的个数来决定是否要输出。

  • 在 longest 函数里面增加如下代码:
int num_places = 1; // 记录最长单词起始位置的个数

if (len > length) {
length = len;
place = point;
num_places = 1; // 清零
} else if (len == length) {
num_places++; // 最长单词起始位置个数加 1
}
  • 然后在 main 函数里面输出最长单词的时候,根据 num_places 的值来决定是否要输出多个最长单词:
if (num_places > 1) {
printf("There are %d longest words:\n", num_places);
} else {
printf("The longest word is: ");
}

for (i = longest(line); alphabetic(line[i]); i++) {
printf("%c", line[i]);
if (i < strlen(line) - 1 && alphabetic(line[i + 1])) {
printf(" ");
} else {
printf("\n");
}
}

这样就可以同时输出两个或者多个一样长的最长单词了。

按照我的思路 我会考虑以下几种方法去试试
第一个:先利用长度进行排序 用个max来记录最长 然后输出的时候可以加个if判断 等于max的都打印
第二个:遍历求长度的时候 用max值把长度记录 然后把等于长度max的的下标都记在一个数组里面 打印的时候按照数组下标打印