总时间限制:
1000ms
内存限制:
65536kB
描述
输入1行句子(不多于200个单词,每个单词长度不超过100),只包含字母、空格和逗号。单词由至少一个连续的字母构成,空格和逗号都是单词间的间隔。
试输出第1个最长的单词和第1个最短单词。
输入
一行句子。
输出
两行输出:
第1行,第一个最长的单词。
第2行,第一个最短的单词。
样例输入
I am studying Programming language C in Peking University
样例输出
Programming I
提示
如果所有单词长度相同,那么第一个单词既是最长单词也是最短单词。
解题思路:
1,了解了substr函数的用法,读取相应的字符。
2,#include<bits/stdc++.h>头文件的使用,本题难点在于字符串的分开与处理,如何区分最大单词,最小单词和存储起来是本题的关键过程,注意方式。
3,贴出两个代码,其中一个有bug,但是现在还未找出,改正。。。。
正确代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int Min=101,Max=0,len=0,symbol=0,start;
string s,maxs,mins;
//cin.getline(s,)
getline(cin,s);
for(int i=0;i<s.length();i++)
{
if(s[i]==' '||s[i]==','||i==s.length()-1)
{
if(i==s.length()-1){
len++;
start=i+1-len;
}
else start=i-len;
if(!symbol)
{
if(len>Max)
{
maxs=s.substr(start,len);
Max=len;
}
if(len<Min)
{
mins=s.substr(start,len);
Min=len;
}
len=0;
}
symbol++;
}
else{
len++;
symbol=0;
}
}
cout<<maxs<<endl;
cout<<mins;
return 0;
}
存在bug代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
char ss[20010],s[110],maxa[110],mina[110];
int l=0,Max=0,Min=101;
cin.getline(ss,20010);
//cout<<strlen(ss);
for(int i=0;i<strlen(ss);i++)
{
if(ss[i]==','||ss[i]=='\n')ss[i]=' ';
}
for(int i=0;i<strlen(ss);i++)
{
if(ss[i]!=' ')s[++l]=ss[i];
else{
if(l>Max){
for(int j=1;j<=l;j++)
maxa[j]=s[j];
Max=l;
}
if(l<Min){
for(int j=1;j<=l;j++)
mina[j]=s[j];
Min=l;
}
l=0;
}
}
for(int i=1;i<=Max;i++)
cout<<maxa[i];
cout<<endl;
for(int i=1;i<=Min;i++)
cout<<mina[i];
return 0;
}