字符串到矢量

时间:2012-03-15 14:58:11

标签: c++ string vector

我有一个字符串,然后我想存储在矢量

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中 这是最好的方式吗?

4 个答案:

答案 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::stringfind方法对字符串进行分区并将其推送到数组中。 (不会写出实际的代码,可能是一个很好的练习)。