043:最長最短單詞
總時間限制: 1000ms 內(nèi)存限制: 65536kB
描述
輸入1行句子(不多于200個單詞怠益,每個單詞長度不超過100),只包含字母硬爆、空格和逗號古瓤。單詞由至少一個連續(xù)的字母構(gòu)成,空格和逗號都是單詞間的間隔亮靴。
試輸出第1個最長的單詞和第1個最短單詞馍盟。
輸入
一行句子。
輸出
兩行輸出:
第1行茧吊,第一個最長的單詞贞岭。
第2行八毯,第一個最短的單詞。
樣例輸入
I am studying Programming language C in Peking University
樣例輸出
Programming
I
提示
如果所有單詞長度相同瞄桨,那么第一個單詞既是最長單詞也是最短單詞
代碼
#include <iostream>
#include<cstring>
using namespace std;
int main(){
char s[20000];
int i=0,j=0; //j用來記錄每個單詞的長度
int max=0,min=200;
int n,m,t,maxbegin,minbegin;
cin.getline(s,20000);
t=strlen(s);
while(s[i]!='\0')//遍歷字符串
{
if((s[i]!=' ')&&(i!=t-1)){j++;}//字符有三種情況:1非空格且非末尾
if(s[i]==' '){
n=j;
m=i-j;
if(n>max){max=n;maxbegin=m;}
if(n<min){min=n;minbegin=m;}
j=0;}//2空格话速,遇到空格則切斷并標(biāo)記單詞長度和起始位置,并將單詞長度j置零
if(i==t-1){
j++;
n=j;
m=i-j+1;
if(n>max){max=n;maxbegin=m;}
if(n<min){min=n;minbegin=m;}
j=0;}//3末尾芯侥,遇到末尾則切斷并標(biāo)記單詞長度和起始位置
i++;
}
for(int k=maxbegin;k<max+maxbegin;k++){
cout<<s[k];
}
cout<<endl;
for(int l=minbegin;l<min+minbegin;l++){
cout<<s[l];
}
return 0;
}
注意:1.計算每個單詞長度有兩種方式泊交,一是記錄間隔位置,然后相減柱查,但需要將字符串頭尾各加一個空格廓俭,不然頭尾容易出錯;
二是直接記錄單詞長度唉工,遇到空格或末尾的間隔白指,就重新記錄長度;
2.直接記錄單詞長度酵紫,到最后一個字符時會有不同告嘲;
3.注意是i=strlen(s)-1,不是s[i]=strlen(s)-1奖地;
4.運行時要關(guān)閉之前的運行窗口橄唬,不然會出錯;
5.注意if(){}格式要完整参歹。