要求通过使用函数,输出用户输入的字符串中的所有最长的单词。
(可能并不是最简洁的) 使用两个函数,一个函数用来计算用户输入的字符串当中最长的单词的长度。另一个函数用于遍历字符串,将符合最长长度的单词直接输出。
逐个字符遍历,根据判断当前遍历到的字符是否是空格,以及其前一位是否是空格,对单词的起始进行判断,然后统计最长的单词的长度。
int longestString(char str[]){ //此函数用于找出字符串中最长单词的长度
int length = strlen(str);
int j=0,begin=0,end,maxnum =0; //此处的j用于表示前一位字符的状态,j为0是空格,j为1不是空格
for(int i=0;i<=length-1;i++){
if(str[i]==' '&&j==1){ //*当前字符是空格,前一位字符不为空格、
end = i;
if(maxnum<(end-begin)){ //如果当前单词大于最大值
maxnum = end - begin; //更新最长单词的长度
}
j=0;
}else if(str[i]!=' '&&j==0){ //*当前是字母字符串,前面是空格
begin = i; //新的单词开始,赋值begin
j=1;
}
if(i==length-1){ //*如果是最后一位
if(maxnum==0){ //如果遍历到最后一位都显示0,证明数组是一个单词
maxnum=length; //直接将整个数组length赋值给maxnum
break;
}
if(str[i]!=' '){
if(maxnum<(length-begin)){
maxnum = length - begin; //此处判断,更新最长单词的长度
}
}
}
}
return maxnum; //返回最长单词的长度
}
该函数通过接受字符串输出以及前一个函数传入的最长单词长度,对字符串进行遍历判断。同理,通过遍历整个字符串,通过判断空格以及前一位是否为空格然后判断单词的起止时间。如果单词的长度符合最长单词长度的要求,直接遍历输出该单词。
void printLongestString(char str[],int longestLength){ //用于查找所有长度为最大值的字符串,然后输出
int length = strlen(str),begin=0,end=0,j=0;
if(length==longestLength){ //如果字符串长度就是最大值字符串,证明只有一个单词,直接输出
printf("%s",str);
}else{
for(int i=0;i<=length-1;i++){ //开始遍历查找数组中符合长度的单词并且输出
if(i==length-1){
if(longestLength==(length-begin)){
for(int k=begin;k<=length-1;k++){
printf("%c",str[k]);
}
}
}else if(str[i]==' '&&j==1){
end=i;
if(longestLength==(end-begin)){
for(int p=begin;p<=end;p++){
printf("%c",str[p]);
}
}
j=0;
}else if(str[i]!=' '&&j==0){
begin=i;
j=1;
}
}
}
}
void main(){ //主函数
char str[100];
gets(str);
int longestString(char str[]);
void printLongestString(char str[],int longestLength);
printLongestString(str,longestString(str)); //调用两个函数
system("pause");
}
#include
#include
#include
接下来看一下运行结果截图:
以上就是本题我自己的个人思路,当然还会有更好的方法。欢迎更多大佬指点一下。
本文共 656 个字数,平均阅读时长 ≈ 2分钟