首页 > 代码库 > 最长最短单词

最长最短单词

最长最短单词


链接:http://ybt.ssoier.cn:8088/problem_show.php?pid=1143

【题目描述】

 输入1行句子(不多于200个单词,每个单词长度不超过100),只包含字母、空格和逗号。单词由至少一个连续的字母构成,空格和逗号都是单词间的间隔。

 试输出第1个最长的单词和第1个最短单词。

 

【输入】

一行句子。

【输出】

第1行,第一个最长的单词。

第2行,第一个最短的单词。

【输入样例】

I am studying Programming language C in Peking University

【输出样例】

Programming
I

【提示】

提示:

如果所有单词长度相同,那么第一个单词既是最长单词也是最短单词。

 

【题解】得到字符串后先拆分单词,flag记录当前状态,再将单词长度比较

#include<iostream>
#include<vector>
using namespace std;

vector <char> s3,s1,s2;
int maxn=0,minn=5000;

void cmp(int l,int &ma,int &mi){
    if(l<mi){
        mi=l;s2.clear() ;
        for(vector<char>::iterator it =s3.begin();it!=s3.end();it++){
            s2.push_back(*it); 
        }
    }
    if(l>ma){
        ma=l;s1.clear() ;
        for(vector<char>::iterator it =s3.begin();it!=s3.end();it++){
            s1.push_back(*it); 
        }
    }
    
}
void remake(string s){
    int flag=0;
    for(int i=0;i<s.size();i++){
        if(s[i]!=,&&s[i]!= ){
            s3.push_back(s[i]); flag=1;
        }else{
            if(flag)cmp(s3.size(),maxn,minn);
            s3.clear() ;flag=0;
        }
    }
    if(!s3.empty())    cmp(s3.size(),maxn,minn);
}
int main(){
    string s;
    getline(cin,s);
    remake(s);
    for(vector<char>::iterator it =s1.begin();it!=s1.end();it++){
            cout<<*it;
        }
    cout<<endl;
    for(vector<char>::iterator it =s2.begin();it!=s2.end();it++){
            cout<<*it;
        }
    
} 

 

最长最短单词