如何正确标记字符串
How to properly Tokenize a string
我正在寻找相当于sscanf
的c ++。
string a,b,c;
string line = "data1,data2,data3";
如何data1
分配给"a"
,data2
分配给b
,data3
分配给c
。
如果分隔符是单个字符,则可以将std::getline
与std::istringstream
和自定义分隔符一起使用。
const auto text = std::string {"alpha,beta,gamma"};
const auto delim = ',';
auto token = std::string {};
auto iss = std::istringstream {text};
while (std::getline(iss, token, delim))
std::cout << "Parsed token: '" << token << "'n";
或者您可以使用正则表达式。
const auto text = std::string {"alpha,beta,gamma"};
const auto pattern = std::regex {"[^,]+"};
const auto first = std::sregex_iterator {text.cbegin(), text.cend(), pattern};
const auto last = std::sregex_iterator {};
for (auto it = first; it != last; ++it)
std::cout << "Parsed token: '" << it->str() << "'n";
这两种解决方案都可能比使用 std::sscanf
慢得多。
在您的情况下,您想拆分包含,
作为限制的string
。您可以使用getline
和stringstream
来实现此目的。
首先,使用 stringstream
将string
更改为流
stringstream ss(line);
之后,您可以使用getline
通过分隔符,
将其拆分
while(getline(ss,tmp,',')) //Here you use string tmp to save it
最后,您可以使用tmp
并将其推入vector <string>
。这是完整的程序示例。
#include<bits/stdc++.h>
#include<sstream>
using namespace std;
int main(){
string line = "data1,data2,data3";
stringstream ss(line);
vector < string > result;string tmp;
while(getline(ss,tmp,',')){
result.push_back(tmp);
}
return 0;
}
相关文章:
- 如何使用Luacneneneba API正确读取字符串和表参数
- 如何在C++中用std::cout正确显示带十六进制的字符串文本
- 如何正确将字符串转换为标准::时间::system_clock::time_point?
- 我还可以添加什么来按空格或空格正确拆分C++字符串?
- C++ "noskipws"没有按预期工作,如何正确允许字符串中的空格?
- 如何检查字符串是否正确以将其转换为 int?
- Xamarin Android:在 C++ 中将字符串从 C# 封送到 Unicode 字符串的正确方法是什么?
- C++ cout 在擦除换行符后打印字符串不正确
- 从文件中读取.txt字符串无法正确打印,但是当写回文件时,它很好
- 将 int 数组转换为字符串的正确方法是什么
- 如何检查字符串是否是另一个字符串的正确子集
- 创建全局常量C字符串的正确方法
- 将符号分配给字符或字符串不正确
- FWRITE 输出字符串不正确
- istringstream getline中的字符串未正确进行比较
- 复制C字符串的正确方法
- 这个反向字符串代码正确吗
- 比较两个C风格字符串的正确函数是什么
- 生成没有重复项的随机字符串的正确方法是什么
- 处理字符串的正确方法是什么:Java客户端和C++服务器