#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 函数里面增加一个新的变量来记录最长单词的起始位置的个数,然后在找到更长的单词时把记录的起始位置的个数清零。然后在输出最长单词的时候,根据记录的起始位置的个数来决定是否要输出。
int num_places = 1; // 记录最长单词起始位置的个数
if (len > length) {
length = len;
place = point;
num_places = 1; // 清零
} else if (len == length) {
num_places++; // 最长单词起始位置个数加 1
}
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的的下标都记在一个数组里面 打印的时候按照数组下标打印