相关知识
getline()和cin适用的场景分别是什么?
如果你要读取一整行字符串,特别是包含空格的字符串,那么应该用getline(),因为getline()停止的标志是换行符。如果你要读取单个变量,那么应该用cin,因为cin停止的标志除了换行符,还有分隔符(空格和缩进)。如果你在cin 后接 getline(),那么getline()会失效,因为cin遇到空格会停止,getline()则会把这个空格读取。为了避免这种情况,要在两个读取之间加上cin.ignore()清除缓冲区。istringstream的用法是什么?
istringstream是C++标准库中的一个类,中文名为输入字符串流,可以把字符串当作输入流处理,将字符串按需提取为不同类型的数据(可以自动转换类型)。在本题中,istringstream对象用于存储输入的整行字符串,并利用空格分隔提取最后一个单词。其实,istringstream还可以用于复杂分割,比如getline(iss, token, ',')就可以解析由逗号分隔的CSV数据。- 对于
vector<string>类型的字符串向量,如何在最后追加字符串或返回最后一个字符串?
追加字符串:push_back()返回最后一个字符串:back() - C++标准库中获取
vector / string大小最常用的方法是什么?——size()
第一轮
最后一版(AC)
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
using namespace std;
int main() {
// getline()读取整行,便于字符串流分割
string line;
getline(cin, line);
// 用istringstream创建输入字符串流对象
vector<string> words;
string word;
istringstream iss(line);
// 字符串分割成单词
while (iss >> word) {
words.push_back(word);
}
string last_word = words.back();
cout << last_word.size() << endl;
}
// 64 位输出请用 printf("%lld")
- 如何读取一整行带空格的字符串并以空格为界分割?
getline()读取,istringstream创建输入字符串流对象。再配合一个string和一个vector<string>就可以分割完毕。
- 如何在
vector<string>的最后追加字符串?——push_back()。 - 如何获得
vector<string>的最后一个字符串?——back()。
第二轮
第一版(AC)
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
using namespace std;
int main() {
string s;
getline(cin, s);
istringstream iss(s);
int l;
string word;
while(iss >> word){
l = word.size();
}
cout << l;
return 0;
}
// 64 位输出请用 printf("%lld")
- 由于此题只需要确定长度,因此没必要声明一个
vector<sting>来存储所有单词,只需不断更新长度即可。
第三轮
第一版
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
using namespace std;
int main() {
string s;
getline(cin, s);
istringstream iss(s);
string word;
int l;
while(iss >> word){
l = word.length();
}
cout << l << endl;
return 0;
}
// 64 位输出请用 printf("%lld")