我有一個字符串,然後我想在載體字符串到載體
string a = "N\nT\n";
來存儲每一個新的行之後,以在不同的小區。
std::string ss (".V/\n.F/\n.R/\n");
for(int i = 0; i< ss.size(); i++)
{
test1.push_back(ss);
}
我想存儲string
在vector test1
這是最好的辦法嗎?
我有一個字符串,然後我想在載體字符串到載體
string a = "N\nT\n";
來存儲每一個新的行之後,以在不同的小區。
std::string ss (".V/\n.F/\n.R/\n");
for(int i = 0; i< ss.size(); i++)
{
test1.push_back(ss);
}
我想存儲string
在vector test1
這是最好的辦法嗎?
您的代碼無法使用;它會將字符串ss.size()
存儲在向量中。
你可能想使用一個字符串流分割字符串:
std::stringstream stream(ss);
std::string line;
while (std::getline(stream, line)) {
test1.push_back(line);
}
注意,換行字符將被丟棄。如果你想保留它,push_back(line + "\n");
。
這當然不是最好的方法,因爲它不起作用。這只是將std::string
的ss.size()
實例推入向量中。
您可以使用find
和substr
方法對字符串進行分區並將它們推送到數組中。 (不會寫實際的代碼,但可能是一個很好的練習)。
Boost :: split會爲你做這個。請參閱使用詳情點擊這裏:
http://www.boost.org/doc/libs/1_49_0/doc/html/string_algo/usage.html#id3184031
如果換行可以然後丟棄你可以使用std::copy()
:
#include <iostream>
#include <sstream>
#include <algorithm>
#include <iterator>
#include <string>
#include <vector>
int main()
{
std::string ss(".V/\n.F/\n.R/\n");
std::istringstream in(ss);
std::vector<std::string> test1;
std::copy(std::istream_iterator<std::string>(in),
std::istream_iterator<std::string>(),
std::back_inserter(test1));
std::for_each(test1.begin(),
test1.end(),
[](const std::string& s)
{
std::cout << s << "\n";
});
return 0;
}
輸出:
.V/
.F/
.R/
不,我想存儲在'串vector test1' – CodersSC 2012-03-15 15:00:44
所以你只是想將字符串拆分成由'\ n''分隔的部分? 'strtok'可以幫助解決這個問題。 (編輯):如果你只是想存儲字符串,你只需要做一次。 – chris 2012-03-15 15:01:52
@chris哦上帝請不要在C++中使用'strtok'。 – 2012-03-15 15:02:52