上一题由于是空格间隔,故我们可以使用scanf来分割字符串,并一一求解字符串长度。
但是该题是要求最长单词和最短单词,而且是第一次出现的最长和最短单词,所以我们应该整个字符串读入,然后根据分隔符来分割单词,并更新记录最长长度和最短长度,以及对应的下标,然后后续根据下标和长度来输出。
#include<iostream>
#include<cstring>
#include<climits>
using namespace std;
char a[20001];
int main()
{
fgets(a,20001,stdin);
int len=strlen(a);
int sum=0,maxl=INT_MIN,minl=INT_MAX,maxp=0,minp=0;
for(int i=0;i<len;i++)
{
if(a[i]!=' '&&a[i]!=',') //不是分隔符则长度加一
sum++;
else if(sum>0) //是分隔符并且前面长度大于0
{
if(sum>maxl) //大于当前最长
{
maxl=sum;
maxp=i-sum;
}
else if(sum<minl) //小于当前最短
{
minl=sum;
minp=i-sum;
}
sum=0; //长度清零
}
}
for(int i=maxp;i<=maxp+maxl-1;i++)
cout<<a[i];
cout<<endl;
for(int i=minp;i<=minp+minl-1;i++)
cout<<a[i];
cout<<endl;
return 0;
}