1

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

档案资料:

G01G02G03G04G05

当我读到它时:

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

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

G01G02G03G04G05

我宁愿在哪里拥有它:

向量(1)=G01;
向量(2)=G02... 以此类推

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

4

3 回答 3

1

C++ 无法知道您希望它像那样被切碎;您可以同样希望每个字符都在一个单独的字符串中。以 2 个字符为一组,......

把它读成一串然后把它剪断

for (int i = 0; i < 5; i++)
{
     std::string bit = instr.substr(i * 3,3);
     vec.push_back(bit);
}
于 2013-10-05T00:35:28.227 回答
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));
    }
}
于 2013-10-05T00:36:08.423 回答
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

您可以将其概括为支持任何长度的子字符串。

于 2013-10-05T00:41:33.157 回答