相关知识

  1. getline()cin适用的场景分别是什么? 如果你要读取一整行字符串,特别是包含空格的字符串,那么应该用getline(),因为getline()停止的标志是换行符。如果你要读取单个变量,那么应该用cin,因为cin停止的标志除了换行符,还有分隔符(空格和缩进)。如果你在cin 后接 getline(),那么getline()会失效,因为cin遇到空格会停止,getline()则会把这个空格读取。为了避免这种情况,要在两个读取之间加上cin.ignore()清除缓冲区。
  2. istringstream的用法是什么? istringstream是C++标准库中的一个类,中文名为输入字符串流,可以把字符串当作输入流处理,将字符串按需提取为不同类型的数据(可以自动转换类型)。在本题中,istringstream对象用于存储输入的整行字符串,并利用空格分隔提取最后一个单词。其实,istringstream还可以用于复杂分割,比如getline(iss, token, ',')就可以解析由逗号分隔的CSV数据。
  3. 对于vector<string>类型的字符串向量,如何在最后追加字符串或返回最后一个字符串? 追加字符串:push_back()返回最后一个字符串:back()
  4. 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")

  1. 如何读取一整行带空格的字符串并以空格为界分割? getline()读取,istringstream创建输入字符串流对象。再配合一个string和一个vector<string>就可以分割完毕。
  2. 如何在vector<string>的最后追加字符串?——push_back()
  3. 如何获得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")

  1. 由于此题只需要确定长度,因此没必要声明一个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")