输入包括多行字符串,字符串的长度len(1<=len<=1000)。
按照原文本中的顺序输出其中最短和最长的字符串,如果最短和最长的字符串不止一个,请全部输出。
hello she sorry he
he hello sorry
#include <string> #include <vector> #include <iostream> using namespace std; int main(){ string s; vector<string> min_group,max_group; while(getline(cin,s)){ if(min_group.empty()&&max_group.empty()){ min_group.push_back(s); max_group.push_back(s); } else{ if(s.size()<=min_group[0].size()){ if(s.size()<min_group[0].size()) min_group.clear(); min_group.push_back(s); } if(s.size()>=max_group[0].size()){ if(s.size()>max_group[0].size()) max_group.clear(); max_group.push_back(s); } } } for(const auto&x:min_group) cout<<x<<endl; for(const auto&x:max_group) cout<<x<<endl; return 0; }字符串有空格是真的坑。。
#include <bits/stdc++.h> using namespace std; bool cmp (string a, string b){ return a.size() < b.size(); } int main (){ string s; vector<string> text; while (getline(cin, s)) text.push_back(s); stable_sort (text.begin(), text.end(), cmp); for (int i = 0; i < text.size() && text[i].size() == text[0].size(); ++ i) cout << text[i] << endl; for (int i = 0; i < text.size(); ++ i){ if (text[i].size() == text[text.size() - 1].size()) cout << text[i] << endl; } }// 挺坑的,字符串里面有空格一开始没注意到被卡了一下,这代码应该挺好理解的了,就不加别的注释了XD
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
bool cmp(const string& s1,const string& s2){
return s1.size()<s2.size();
}
int main(){
string str;
int min,max;
vector<string> all;
while(getline(cin,str))
all.push_back(str);
stable_sort(all.begin(),all.end(),cmp);
min=all[0].size();
max=all[all.size()-1].size();
for(string s:all){
if(s.si***||s.size()==max)
cout<<s<<endl;
}
return 0;
}
#include <iostream> #include <string> #include <vector> using namespace std; int main() { vector<string> vecs; string s; while (getline(cin, s)) { vecs.push_back(s); } vector<int> minIndex; vector<int> maxIndex; int min = 1001; int max = 0; for (int i = 0; i < vecs.size(); ++i) { if (vecs[i].length() == min) { minIndex.push_back(i); } else if (vecs[i].size() < min) { min = vecs[i].length();//不知为何代码会被和谐成乱码,上面用length也是这个原因,醉了 minIndex.clear(); minIndex.push_back(i); } if (vecs[i].size() == max) { maxIndex.push_back(i); } else if (vecs[i].size() > max) { max = vecs[i].size(); maxIndex.clear(); maxIndex.push_back(i); } } for (int i = 0; i < minIndex.size(); ++i) { cout << vecs[minIndex[i]] << endl; } for (int i = 0; i < maxIndex.size(); ++i) { cout << vecs[maxIndex[i]] << endl; } return 0; }
#include <iostream> using namespace std; int main() { string ln,sh,tem; getline(cin,sh); ln=sh; int slen=sh.length(); int llen= ln.length(); while(getline(cin,tem)) { int x=tem.length(); if(x>llen){ ln=tem; llen=x; } else if(x==llen) ln+="\n"+tem; else if(x<slen){ sh=tem; slen=x; } else if(x==slen) sh+="\n"+tem; } cout<<sh<<endl<<ln<<endl; }
#include <bits/stdc++.h> using namespace std; const int maxn=1005; string s[maxn],t; bool cmp(string a,string b) { return a.size()<b.size(); } int main() { int n=0; while(getline(cin,t)) { s[n++]=t; } stable_sort(s,s+n,cmp); int minlen=s[0].size(), maxlen=s[n-1].size(); for(int i=0;i<n;++i) { if(s[i].si***len||s[i].size()==maxlen) cout<<s[i]<<endl; } return 0; }
虽然通过了,但是如果有两行字符串是相同的,那是输出一个还是两个呢?
#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct my_string { char s[1000]; int len; }str; int main() { str strings[100]; int sum = 0; int min = 1000; int max = 0; while(gets(strings[sum].s)!= NULL) { strings[sum].len = strlen(strings[sum].s); if(strings[sum].len < min) { min = strings[sum].len; } if(strings[sum].len > max) { max = strings[sum].len; } sum++; } for(int i = 0; i < sum; i++) { if(strings[i].len == min) { printf("%s\n", strings[i].s); } } for(int i = 0; i < sum; i++) { if(strings[i].len == max) { printf("%s\n", strings[i].s); } } return 0; }
#include <stdio.h>//方法2,1.找出所有字符串的长度,并找到最大最小值 最大值初始化为0最小值初始化为1000方便计算 #include <string.h>//2.对应最大最小值的字符串输出//3.此方法省去了排序的过程效率更高 struct String { char s[1000]; int len; }str[100]; int main() { int i,n=0,min=1000,max=1;//反着初始化,最长0最短1000 while(gets(str[n].s)!=NULL)//gets对应NULL,scanf对应EOF {//不加结束语句在本地测试的时候输入停不下来 str[n].len= strlen(str[n].s); if(str[n].len<min)//找最小值 min=str[n].len; if(str[n].len > max)//找最大值 max=str[n].len; n++;//n作为s[]的下标 } for(i=0;i<n; i++)//输出所有长度一致的最小值 if(str[i].len == min) printf("%s\n", str[i].s); for(i=0;i<n;i++)//输出所有长度一致的最大值 if(str[i].len==max) printf("%s\n", str[i].s); return 0; }
#include <bits/stdc++.h> using namespace std; int main(){ vector<string> temp; string a; int max = 0,min = 1001; while(getline(cin,a)){ // 边读入边记录最长和最短的长度,然后扫两遍数组,输出 temp.push_back(a); if(a.size()>max) max = a.size(); if(a.size()<min) min = a.size(); } for(int i=0;i<temp.size();i++){ if(temp[i].si***) cout<<temp[i]<<endl; } for(int i=0;i<temp.size();i++){ if(temp[i].size()==max) cout<<temp[i]<<endl; } }
#include <iostream> #include <vector> using namespace std; int main(){ string str; vector<string> strvec; int n=0; while(getline(cin,str) && str!="0"){ strvec.push_back(str); n++; } int min_size=2147483647; int max_size=0; for(int i=0;i<n;i++){ if(strvec[i].length()<min_si***_size=strvec[i].length(); } if(strvec[i].length()>max_size){ max_size=strvec[i].length(); } } for(int i=0;i<n;i++){ if(strvec[i].length()==min_size){ cout << strvec[i] << endl; } } for(int i=0;i<n;i++){ if(strvec[i].length()==max_size){ cout << strvec[i] << endl; } } }
#include <iostream> #include<string> #include<vector> #include<algorithm> using namespace std; bool cmp(string a,string b){ return a.size()<b.size(); } int main() { string str; vector<string>ve; while(getline(cin,str)&&str.size()!=0){ ve.push_back(str); } sort(ve.begin(),ve.end(),cmp); unsigned long mi=ve[0].size(); unsigned long ma=ve[ve.size()-1].size(); for(string str:ve){ if(str.size()==mi||str.size()==ma) cout<<str<<endl; } return 0; }
#include <iostream> using namespace std; #include "vector" int main() { vector<string>v; string str; while(getline(cin,str)){ v.push_back(str); } int min_length=9999,max_length=0; for(auto&a:v){ if(a.size()<=min_length) min_length=a.size(); if(a.size()>max_length) max_length=a.size(); } for(auto&a:v){ if(a.si***_length) cout<<a<<endl; } for(auto&a:v){ if(a.size()==max_length) cout<<a<<endl; } }
#include <bits/stdc++.h> using namespace std; int main() { map<int,vector<string>> mp; string s; int minlen = 0x3f; int maxlen = -0x3f; while(getline(cin,s)){ int len = s.size(); mp[len].push_back(s); minlen = min(minlen,len); maxlen = max(maxlen,len); } for(auto u : mp[minlen]) cout<<u<<endl; for(auto u : mp[maxlen]) cout<<u<<endl; return 0; }
#include <climits> #include <iostream> #include <string> #include <vector> using namespace std; int main() { string str; int maxlen = 0, minlen = INT_MAX; //最短和最长字符串长度 vector<string>shortest, longest; //最短和最长字符串 while (getline(cin, str)) { if (str.length() > maxlen) { maxlen = str.length(); longest.clear(); longest.push_back(str); } else if (str.length() == maxlen) { longest.push_back(str); } if (str.length() < minlen) { minlen = str.length(); shortest.clear(); shortest.push_back(str); } else if (str.length() == minlen) { shortest.push_back(str); } } for (const auto& str : shortest) { //输出最短字符串 cout << str << endl; } for (const auto& str : longest) { //输出最长字符串 cout << str << endl; } return 0; }