getline
reads characters from an input stream and places them into a string:
getline
从输入流中读取字符, 并把它们转换成字符串.
getline(input, str, delim), 默认的分隔符是’ ’字符.
参数
input - 流中获取数据
str - 把数据转换成字符串
delim - 分隔符
例一:
#include <string>
#include <iostream>
#include <sstream>
int main()
{
// greet the user
std::string name;
std::cout << "What is your name? ";
std::getline(std::cin, name);
std::cout << "Hello " << name << ", nice to meet you.
";
// read file line by line
std::istringstream input;
input.str("1
2
3
4
5
6
7
");
int sum = 0;
for (std::string line; std::getline(input, line); ) {
sum += std::stoi(line);
}
std::cout << "
The sum is: " << sum << "
";
}
注意:
c++中的atoi()和stoi()函数的用法和区别:
相同点:
①都是C++的字符处理函数,把数字字符串转换成int输出
不同点:
①atoi()的参数是 const char* ,因此对于一个字符串str我们必须调用 c_str()的方法把这个string转换成 const char*类型的,而stoi()的参数是const string*,不需要转化为 const char*;
②stoi()会做范围检查,默认范围是在int的范围内的,如果超出范围的话则会runtime error!
而atoi()不会做范围检查,如果超出范围的话,超出上界,则输出上界,超出下界,则输出下界;
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
void split(const std::string& s,
std::vector<std::string>& sv,
const char delim = ' ') {
sv.clear();
std::istringstream iss(s);
std::string temp;
while (std::getline(iss, temp, delim)) {
sv.emplace_back(std::move(temp));
}
return;
}
int main() {
std::string s("abc:def:ghi");
std::vector<std::string> sv;
split(s, sv, ':');
for (const auto& s : sv) {
std::cout << s << std::endl;
}
return 0;
}
或者:默认是空格和tab为分割符
istringstream strcin(str); string s; vector<string> vs; while(strcin >> s) vs.push_back(s);
istringstream是由一个string对象构造而来,istringstream类从一个string对象读取字符。
istringstream的构造函数原形如下:
istringstream::istringstream(string str);