在C++中分割字符串的最佳方法?該字符串可以被假定爲由分隔符;
分隔的單詞組成。使用令牌分割C++ std :: string,例如「;」
從我們的引導線的角度來看,C字符串函數是不允許的,也不允許使用Boost,因爲安全問題不允許使用開源。
最好的解決方案我現在的問題是:
string str("denmark;sweden;india;us");
以上str
應存放在向量作爲字符串。我們怎樣才能做到這一點?
感謝您的意見。
在C++中分割字符串的最佳方法?該字符串可以被假定爲由分隔符;
分隔的單詞組成。使用令牌分割C++ std :: string,例如「;」
從我們的引導線的角度來看,C字符串函數是不允許的,也不允許使用Boost,因爲安全問題不允許使用開源。
最好的解決方案我現在的問題是:
string str("denmark;sweden;india;us");
以上str
應存放在向量作爲字符串。我們怎樣才能做到這一點?
感謝您的意見。
我找到的std ::函數getline()往往是最簡單的。可選的分隔符參數意味着它不只是閱讀「行」:
#include <sstream>
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<string> strings;
istringstream f("denmark;sweden;india;us");
string s;
while (getline(f, s, ';')) {
cout << s << endl;
strings.push_back(s);
}
}
+1:哇,從來沒有考慮過使用'getline'和'istringstream'。 – 2011-03-02 19:04:36
這裏有很多類似的問題,但這種方法似乎對我來說最爲方便。非常好! – 2013-03-05 07:38:40
我一直在尋找這樣的方法幾天。非常感謝 !! – 2017-05-30 05:39:05
您可以使用字符串流並將元素讀入向量。
Here有許多不同的例子...
的例子之一的副本:
std::vector<std::string> split(const std::string& s, char seperator)
{
std::vector<std::string> output;
std::string::size_type prev_pos = 0, pos = 0;
while((pos = s.find(seperator, pos)) != std::string::npos)
{
std::string substring(s.substr(prev_pos, pos-prev_pos));
output.push_back(substring);
prev_pos = ++pos;
}
output.push_back(s.substr(prev_pos, pos-prev_pos)); // Last word
return output;
}
可以給我一個例子 – venkysmarty 2011-03-02 12:46:31
在鏈接提供的空間被用作分隔符我怎樣才能指定「;」作爲分隔符 – venkysmarty 2011-03-02 12:48:35
有很多例子,其中一些是空間分隔符,另一些是分隔符。 – Fox32 2011-03-02 12:49:49
有幾個可用的庫解決這個問題,但最簡單的可能是使用升壓標記生成器:
#include <iostream>
#include <string>
#include <boost/tokenizer.hpp>
#include <boost/foreach.hpp>
typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
std::string str("denmark;sweden;india;us");
boost::char_separator<char> sep(";");
tokenizer tokens(str, sep);
BOOST_FOREACH(std::string const& token, tokens)
{
std::cout << "<" << *tok_iter << "> " << "\n";
}
我不認爲這應該被標記爲重複,另一個問題促進優雅而不是效率,這是我不同意和爲此避免的。 – user2462027 2014-12-12 07:51:09