这题其实挺恶心的,比赛时候分开读的会被吞掉空格导致 WA(一点分都弄不到) 非常有趣的一题! 虽说比完赛都在羡慕更新的语言都有按照分隔符读入的功能,其实 C++也可以做到
cpp
vector<string> split(const string &str, char delimiter){
vector<string> tokens;
stringstream ss(str);
string token;
while(getline(ss, token, delimiter)) {
tokens.push_back(token);
}
return tokens;
}这个函数按照引用的形式传入了一个字符串,然后将这个字符串作为参数实例化了一个名为 ss 的 stringstream 对象,用作下面那个 getline 的输入流。 getline 除了平时常用的 getline(cin,s) 之外还有一个参数列表为 std::istream &__is, std::string &__str, char __delim 的重载形式,它会读到末尾或者是分隔符的时候终止。 当然,只有指针移到这个分隔符的时候才能判断是否是这个分隔符,所以例如 hello...world,这里读入 hello 的时候指针就已经移到第一个 . 了,所以只会往容器里放进去两个 .,正好利用这个机制可以巧妙的只吞掉分词用的空格,把其他坑人的空格留下来。