C语言学习:输入一行字符串,输出字符串中最长的单词。

这篇具有很好参考价值的文章主要介绍了C语言学习:输入一行字符串,输出字符串中最长的单词。。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

输入一行字符,编写一个函数,将此字符串中最长的单词输出。

代码示例如下:

一、输出字符串中第一个最长单词

#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;
}

测试结果: 

写一个函数,输入一行字符,将此字符串中最长的单词输出。,c语言,学习

二、输出字符串中所有最长单词

评论区指出上述程序不能输出同样最长的两个单词,修改后该程序能输出所有最长单词,即如果有多个同样最长的单词,会全部输出。在修改途中发现如果想要相同单词仅输出一个(不重复)还需要修改。

#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;
}

测试结果:

写一个函数,输入一行字符,将此字符串中最长的单词输出。,c语言,学习

三、输出字符串中所有最长单词(不重复)

#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;
}

测试结果:

写一个函数,输入一行字符,将此字符串中最长的单词输出。,c语言,学习


上面写的有点乱,而且有些数组没有必要,如果需要节省分配空间可以修改一下下:文章来源地址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模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包