2016-03-26 93 views

回答

3

如果您的分隔符是單個字符,則可以使用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慢得多。

1

對於您的情況,您想分割一個string,其中包含,作爲限制。您可以使用getlinestringstream來實現此目的。

首先,你改變了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; 
}