- 标准库中的string类没有实现像C#和Java中string类的split函数,所以想要分割字符串的时候需要我们自己手动实现。但是有了
stringstream
类就可以很容易的实现,stringstream默认遇到空格、tab、回车换行会停止字节流输出。
#include <sstream>
#include <iostream>
int main()
{
std::stringstream ss("this apple is sweet");
std::string word;
while (ss >> word)
{
std::cout << word << std::endl;
}
return 0;
}
- 可以使用
getline()
函数用其他字符分割字符串,第一个参数 - 流中获取数据,第二个参数 - 把数据转换成字符串,第三个参数 - 分隔符。
#include <sstream>
#include <iostream>
int main()
{
std::string str = "this,is,apple";
std::istringstream ss(str);
std::string token;
while (std::getline(ss, token, ',')) {
std::cout << token << '\n';
}
return 0;
}
- 匿名函数实现一个功能,输入一个由空格分割单词的字符串,就计算出每个单词的出现频率:
unordered_map<string, int> freq;
auto insert = [&](string s) {
stringstream ss(s);
string word;
while (ss >> word) {
++freq[move(word)];
}
};
insert(s1);
accumulate
是numeric库中的一个函数,主要用来对指定范围内元素求和,但也自行指定一些其他操作,如范围内所有元素相乘、相除等。
int main() {
vector<int> arr{
1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int sum = accumulate(arr.begin(), arr.end(), 0);
int sum = accumulate(arr.begin()