最长最短单词
链接: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; } }
#include<iostream> #include<cstdio> #include<cstring> using namespace std; string s; int b,a[20005],c[305]; int main(){ int L=0,pos=0,pos2=0,M=200; getline(cin,s); int l=s.length(); for(int i=0;i<l;i++) if((s[i]<='z'&&s[i]>='a')||(s[i]<='Z'&&s[i]>='A')) a[i]=1; for(int i=0;i<l;i++) { int j=i,flag=0; while(a[j++]) { if(!a[j-2])flag=1; } if(j-i>L) { L=j-i; pos=i; } if(j-i<M&&flag) { M=j-i; pos2=i; } } for(int i=pos;i<pos+L;i++) if((s[i]<='z'&&s[i]>='a')||(s[i]<='Z'&&s[i]>='A')) cout<<s[i]; cout<<endl; for(int i=pos2;i<pos2+M;i++) if((s[i]<='z'&&s[i]>='a')||(s[i]<='Z'&&s[i]>='A')) cout<<s[i]; }
#include<stdio.h> #include<string.h> char s[20005],s1[105],s2[105]; int max1=-1,max2=0,min1=101,min2=0; int main() { gets(s); int i=0,len=strlen(s); while (i<len) { while (i<len&&(s[i]==' '||s[i]==','))i++; if (i==len)break; int j=i; while (j<len&&(s[j]!=' '&&s[j]!=','))j++; if (j-i>max1) { max1=j-i; max2=i; } if (j-i<min1) { min1=j-i; min2=i; } i=j; } strncpy(s1,s+max2,max1); s1[max1]='\0'; strncpy(s2,s+min2,min1); s2[min1]='\0'; printf("%s\n%s",s1,s2); return 0; }