我正在尋找一個C++等效的sscanf
。如何正確標記字符串
string a,b,c;
string line = "data1,data2,data3";
如何做我分配到data1
"a"
,data2
到b
和data3
到c
。
我正在尋找一個C++等效的sscanf
。如何正確標記字符串
string a,b,c;
string line = "data1,data2,data3";
如何做我分配到data1
"a"
,data2
到b
和data3
到c
。
如果您的分隔符是單個字符,則可以使用std::getline
,並使用std::istringstream
和自定義分隔符。您可以使用regular expression。
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
來實現此目的。
首先,你改變了string
到使用stringstream
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;
}