50字范文,内容丰富有趣,生活中的好帮手!
50字范文 > 信息学奥赛一本通 1143:最长最短单词 | OpenJudge NOI 1.7 25

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

时间:2019-05-21 12:19:03

相关推荐

信息学奥赛一本通 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;}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。