我有一个字符串,然后我想存储在矢量
中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
中
这是最好的方式吗?
答案 0 :(得分:10)
您的代码不起作用;它会将字符串ss.size()
存储在向量中。
您可能希望使用字符串流来拆分字符串:
std::stringstream stream(ss);
std::string line;
while (std::getline(stream, line)) {
test1.push_back(line);
}
请注意,换行符将被丢弃。如果您想保留它,push_back(line + "\n");
。
答案 1 :(得分:4)
Boost :: split会为你做这件事。请参阅此处的使用详情:
http://www.boost.org/doc/libs/1_49_0/doc/html/string_algo/usage.html#id3184031
答案 2 :(得分:2)
如果可以丢弃换行符,则可以使用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/
答案 3 :(得分:0)
这肯定不是最好的方法,因为它不起作用。这只会在向量中推送ss.size()
的{{1}}个实例。
您可以使用std::string
和find
方法对字符串进行分区并将其推送到数组中。 (不会写出实际的代码,可能是一个很好的练习)。