题目描述
一个以 . 结尾的简单英文句子,单词之间用空格分隔,没有缩写形式和其它特殊形式,求句子中的最长单词。
输入格式
输入一行字符串,表示这个简单英文句子,长度不超过 500。
输出格式
该句子中最长的单词。如果多于一个,则输出第一个。
样例
输入样例:
I am a student of Peking University.
输出样例:
University
法一:用770.单词替换方法一的思路创建一个字符串数组利用cin读到空格就停止的特性
#include <cstring>
#include <iostream>
using namespace std;
int main(){
string s[500];
int i = 0;
int cnt = 0;
string ans;
while(cin >> s[i++]){
int n = s[i-1].size();
if(s[i-1][n-1] == '.'){
n--;
s[i-1][n] = 0;
}
if(n > cnt) {
cnt = n;
ans = s[i-1];
}
}
cout << ans << endl;
return 0;
}
法二:用string常用的成员函数解决问题 c++ string 详细用法点击查看
#include <cstring>
#include <iostream>
using namespace std;
int main(){
string str,ans;
while(cin >> str){
if(str.back() == '.') str.pop_back();
//str.back() 用于返回该字符串的最后一个字符;str.pop_back()用于删除该字符串的最后一个字符,有效减少其长度;
//补充:str.push_back('a')用于在字符串末尾添加一个字符a;
if(str.size() > ans.size()) ans = str;
}
cout << ans << endl;
return 0;
}
法三:利用stringstream分割字符串; stringstream用法
#include <sstream>
#include <iostream>
using namespace std;
int main(){
string s, ans;
getline(cin,s);
stringstream ss(s); //将字符串按照空格划分成字符串流;
string str;
while(ss >> str){ //将ss当作cin使用;
if (str.back() == '.') str.pop_back();
if (str.size() > ans.size()) ans = str;
}
cout << ans << endl;
return 0;
}