信息学奥赛一本通 1143:最长最短单词 | OpenJudge NOI 1.7 25
生活随笔
收集整理的這篇文章主要介紹了
信息学奥赛一本通 1143:最长最短单词 | OpenJudge NOI 1.7 25
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【題目鏈接】
ybt 1143:最長最短單詞
OpenJudge NOI 1.7 25:最長最短單詞
【題目考點】
1. 字符串處理
【解題思路】
- 思路1:將字符串分解為多個單詞,而后求出各個單詞的長度,再找出最長和最短的單詞。
- 思路2:遍歷字符串,同時構造單詞。遇到空格或逗號時完成構造一個單詞,而后判斷該單詞是否是已知的最長或最短單詞,記下最長或最短單詞。
【題解代碼】
解法1:用字符數組,用二維數組保存多個單詞
- 將字符串拆解為多個單詞,用二維數組保存。
- 遍歷該二維數組,找出其中最長和最短單詞。
解法2:用string類,遍歷字符串,構造單詞并看其是否是最長或最短單詞
#include<bits/stdc++.h> using namespace std; int main() {string s, word, maxWord, minWord;//s:輸入的字符串 word:分解出的一個單詞 maxWord:最長單詞 minWord最短單詞 getline(cin, s);s += ' ';//字符串末尾加上一個空格分隔符,便于統一處理 int wst = 0, wlen = 0;//wst:單詞的起始位置 wlen:單詞的長度 int minLen = 200, maxLen = 0;//minLen:最短長度 maxLen:最大長度 for(int i = 0; i < s.length(); ++i){if(s[i] == ' ' || s[i] == ',')//如果遇到分隔符{if(wlen > 0)//wlen > 0 排除有連續的分隔符的情況{word = s.substr(wst, wlen);//從wst位置到i-1位置構成一個單詞,其長度為wlen,截取該單詞 if(wlen > maxLen)//如果該單詞比最長單詞長,那么該單詞就是最長單詞 {maxWord = word;maxLen = wlen;}if(wlen < minLen)//如果該單詞比最短單詞短,那么該單詞就是最短單詞{minWord = word;minLen = wlen;}}wst = i + 1;//分隔符的下一個位置作為下一個單詞的起始位置 wlen = 0;}else//如果遇到一般字符 wlen++;//增加該單詞長度 }cout<<maxWord<<endl;cout<<minWord<<endl;return 0; }總結
以上是生活随笔為你收集整理的信息学奥赛一本通 1143:最长最短单词 | OpenJudge NOI 1.7 25的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 信息奥赛一本通(1100:金币)
- 下一篇: 信息学奥赛一本通(1329:【例8.2】