日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

信息学奥赛一本通 1143:最长最短单词 | OpenJudge NOI 1.7 25

發布時間:2025/3/17 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 信息学奥赛一本通 1143:最长最短单词 | OpenJudge NOI 1.7 25 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【題目鏈接】

ybt 1143:最長最短單詞
OpenJudge NOI 1.7 25:最長最短單詞

【題目考點】

1. 字符串處理

【解題思路】

  • 思路1:將字符串分解為多個單詞,而后求出各個單詞的長度,再找出最長和最短的單詞。
  • 思路2:遍歷字符串,同時構造單詞。遇到空格或逗號時完成構造一個單詞,而后判斷該單詞是否是已知的最長或最短單詞,記下最長或最短單詞。

【題解代碼】

解法1:用字符數組,用二維數組保存多個單詞

  • 將字符串拆解為多個單詞,用二維數組保存。
  • 遍歷該二維數組,找出其中最長和最短單詞。
#include<bits/stdc++.h> using namespace std; int main() {char s[205][105]; //保存分割后的多個單詞,s[i]是第i個單詞字符串 char c;//當前讀取的字符 int w = 0, j = 0;//w:s的第一下標,表示單詞編號。 j:s的第二下標,表示某單詞的第幾字符 while((c = getchar()) != '\n')//不斷讀取字符 {if(c != ' ' && c != ',')//如果不是分隔符,那么向單詞s[w]添加一個字符 s[w][j++] = c;else if(j != 0)//如果是分隔符,且排除有連續空格或逗號的情況 {s[w][j] = '\0';//為單詞s[w]添加字符串末尾 w++;//開始填充下一個單詞 j = 0; }}s[w][j] = '\0';//為最后一個單詞添加末尾 w++;int wordNum = w;//單詞總數量 int maxlen = 0, minlen = 200;//maxlen:最長單詞長度、 minlen:最短單詞長度 int max_i, min_i;//max_i:最長單詞編號, min_i:最短單詞編號 for(int i = 0; i < wordNum; ++i)//遍歷所有單詞,尋找其中最長和最短單詞 { if(strlen(s[i]) > maxlen){max_i = i;maxlen = strlen(s[i]);}if(strlen(s[i]) < minlen){min_i = i;minlen = strlen(s[i]);}}puts(s[max_i]);//puts輸出一個字符串后自動輸出換行符 puts(s[min_i]);return 0; }

解法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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。