利用c++ std::getline实现split
2024-10-09 20:10:04
getline
reads characters from an input stream and places them into a string:
getline
从输入流中读取字符, 并把它们转换成字符串.
getline(input, str, delim), 默认的分隔符是’\n’字符.
参数
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.\n"; // read file line by line
std::istringstream input;
input.str("1\n2\n3\n4\n5\n6\n7\n");
int sum = 0;
for (std::string line; std::getline(input, line); ) {
sum += std::stoi(line);
}
std::cout << "\nThe sum is: " << sum << "\n";
}
注意:
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);
最新文章
- Mysql 命令大全
- linux命令(5):rm 命令
- Linux常用命令_(系统管理)
- dede会员指定栏目发布文章
- Linux 用户态和内核态
- SQL Server 联表字段合并查询
- java 截取字符串 拆分字符串
- 移动M站建设
- 黄聪:Microsoft Enterprise Library 5.0 系列教程(二) Cryptography Application Block (初级)
- tc-SRM-626-DIV1-250
- c#接口和抽象类比较
- Shell中脚本变量的作用域
- PyCharm远程开发和调试
- 十大web安全扫描工具
- 自学Linux Shell17.1-正则表达式
- Cglib动态代理实现原理
- vue问题总结
- 【LG3250】[HNOI2016]网络
- mac地址常识及获取
- BZOJ 3531 SDOI2014 旅行 树链剖分+线段树动态开点