输入一行字符,编写一个函数,将此字符串中最长的单词输出。
代码示例如下:
一、输出字符串中第一个最长单词
#include<stdio.h>
#include<string.h>
void longest(char str[],char word[])
{
int i,j;
char b[50];
for(i=0;str[i]!='\0';i++)
{
j=0;
while(str[i]>='a' && str[i]<='z' || str[i]>='A' && str[i]<='Z')
b[j++]=str[i++];
b[j]='\0';
if(strlen(b)>strlen(word))
strcpy(word,b);
}
}
int main()
{
char str[100],word[45];
word[0]='\0';
printf("请输入一行字符:\n");
gets(str);
longest(str,word);
printf("最长的单词是:\n");
puts(word);
return 0;
}
测试结果:
二、输出字符串中所有最长单词
评论区指出上述程序不能输出同样最长的两个单词,修改后该程序能输出所有最长单词,即如果有多个同样最长的单词,会全部输出。在修改途中发现如果想要相同单词仅输出一个(不重复)还需要修改。
#include<stdio.h>
#include<string.h>
void longest(char str[],char word[])
{
int i,j,max_len=0;
char b[50],longest_word[45];
longest_word[0]='\0';
for(i=0;str[i]!='\0';i++)
{
j=0;
while(str[i]>='a' && str[i]<='z' || str[i]>='A' && str[i]<='Z')
b[j++]=str[i++];
b[j]='\0';
//如果当前字符串b的长度大于之前的最大长度,则更新最大长度和最长单词
if(strlen(b)>max_len)
{
max_len=strlen(b);
strcpy(longest_word,b);
}
//如果当前字符串b的长度等于之前的最大长度,则将其加入到最长单词中
else if(strlen(b)==max_len)
{
strcat(longest_word," ");
strcat(longest_word,b);
}
}
strcpy(word,longest_word);
}
int main()
{
char str[100],word[45];
word[0]='\0';
printf("请输入一行字符:\n");
gets(str);
longest(str,word);
printf("最长的单词是:\n");
puts(word);
return 0;
}
测试结果:
三、输出字符串中所有最长单词(不重复)
#include<stdio.h>
#include<string.h>
void longest(char str[],char word[])
{
int i,j,k,max_len=0,count=0;
char b[50],longest_word[45],compare[10][45];
longest_word[0]='\0';
compare[0][0] = '\0';
for(i=0;str[i]!='\0';i++)
{
j=0;
while(str[i]>='a' && str[i]<='z' || str[i]>='A' && str[i]<='Z')
b[j++]=str[i++];
b[j]='\0';
if(strlen(b) > max_len)
{
max_len=strlen(b);
strcpy(longest_word,b);
count = 1;
memset(compare, '\0', sizeof(compare)); //清空数组
strcpy(compare[1], b); //创建一个二维数组存储最长单词,方便对比是否相同
}
else if (strlen(b) == max_len)
{
int flag = 0;
for (k = 1; k <= count; k++)
if (strcmp(b, compare[k]) == 0) //b中的单词和compare数组中的单词逐个对比
{
flag = 1;
break;
}
if (flag == 0)//如果不相同,将单词加入longest_word中
{
strcat(longest_word, " ");
strcat(longest_word, b);
count++;
strcpy(compare[count], b); //将单词放入compare中,继续筛查新单词后序是否重复
}
}
}
strcpy(word,longest_word);
}
int main()
{
char str[100], word[45]={0};
printf("请输入一行字符:\n");
gets(str);
longest(str,word);
printf("最长的单词是:\n");
puts(word);
return 0;
}
测试结果:
文章来源:https://www.toymoban.com/news/detail-753243.html
上面写的有点乱,而且有些数组没有必要,如果需要节省分配空间可以修改一下下:文章来源地址https://www.toymoban.com/news/detail-753243.html
void longest(char str[])
{
int i,j,k,max_len=0,count=0;
char b[50],longest_word[10][45];
longest_word[0][0] = '\0';
for(i=0;str[i]!='\0';i++)
{
j=0;
while(str[i]>='a' && str[i]<='z' || str[i]>='A' && str[i]<='Z')
b[j++]=str[i++];
b[j]='\0';
if(strlen(b) > max_len)
{
max_len=strlen(b);
memset(longest_word, '\0', sizeof(longest_word));
strcpy(longest_word[1], b);
count = 1;
}
else if (strlen(b) == max_len)
{
int flag = 0;
for (k = 1; k <= count; k++)
if (strcmp(b, longest_word[k]) == 0)
{
flag = 1;
break;
}
if (flag == 0)
{
count++;
strcpy(longest_word[count], b);
}
}
}
printf("最长的单词是:\n");
for (k = 1; k <= count; k++)
puts(longest_word[k]);
}
int main()
{
char str[100];
printf("请输入一行字符:\n");
gets(str);
longest(str);
return 0;
}
到了这里,关于C语言学习:输入一行字符串,输出字符串中最长的单词。的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!