如何将字符串(不含空格)拆分为单独的字符串?

时间:2013-10-05 00:19:06

标签: c++ string

我正在尝试从一行读取属于结构向量的多个字符串,但该字符串没有空格。 这基本上是我的问题:

档案数据:

  

G01G02G03G04G05

当我读到它时:

for (int i=0;i<5;i++)
    File>>vector.at(i).string

我得到的是矢量中的第一个字符串

  

G01G02G03G04G05

我宁愿拥有它:

  

载体(1)= G01;
  vector(2)= G02 ......等等

抱歉忘记了一些信息,我在C ++ vs2010中,它总是三个字符长,从G,R,C,D开始

3 个答案:

答案 0 :(得分:1)

C ++无法知道你希望它像这样被砍掉;你可以同样想要每个字符在一个单独的字符串中。一串两个字符,......

将其读入一个字符串,然后将字符串剁掉

for (int i = 0; i < 5; i++)
{
     std::string bit = instr.substr(i * 3,3);
     vec.push_back(bit);
}

答案 1 :(得分:1)

  

“是的,总是三个字符”

然后它可以看起来如下:

std::vector<std::string> tokens;

std::string line;
if (getline(cin, line)) {
    for (size_t i = 0; i < line.size(); i += 3) {
        tokens.push_back(line.substr(i, 3));
    }
}

答案 2 :(得分:1)

这就是我将子串分割成一个向量的方法:

std::vector<std::string> parseData(const std::string& s)
{
    if (s.size() % 3 != 0) {
        throw std::runtime_error("incorrect data length");
    }

    std::vector<std::string> result;`enter code here`
    for (size_t i = 0; i <= s.size() - 3; i += 3) {
        result.emplace_back(s, i, 3);
    }

    return result;
}

有关完整的可编辑演示,请参阅coliru

你可以generalise来支持任何长度的子字符串。