043:最長最短單詞
阿新 • • 發佈:2018-12-12
總時間限制:
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; }