当我打印字符串时,我不知道它的输出是什么

时间:2019-07-26 11:46:53

标签: c++ string

我的代码正在读取文件,并使用定界符分隔文本。好了,上一部分没有问题。当我使用定界符“-”分隔文本行时,我尝试将字符串转换为int。单独的部分也可以,但是当我尝试打印字符串时,终端上会显示一些奇怪的东西。我不知道这是什么,你们有什么主意吗? 我的文本文件格式是[0,0] -93。我正在使用-作为分隔符。

This is the output 我将显示我的代码

client.stream.on('error', (err) => {
    console.log('error', err);
    client.end()
});

1 个答案:

答案 0 :(得分:0)

嗯,我仍然不确定问题是什么。评论中已经给出了大多数答案。

此外,我还记得源文件行的模式。我给了this questions一个答案,并为此写了一个分词器。

我想您也想这样做,因为还有一个x andy,它可能是坐标,然后是一些ID。

但是,也许您只是在令牌生成器中的“-”之后选择ID。然后,您的字符串向量将只有元素0。这将导致您的问题。 std::vector具有函数at(),当您尝试访问超出范围的值时,该函数将引发错误并告诉您。您应该使用它而不是tokenString[i];(因此,tokenString.at(i);)。

然后,您应该了解用花括号括起来的代码“块”。您的for循环仅调用语句tokenString[i];,但不执行任何操作。 tokenString[i];应该做什么?

因此,如果要在for循环中执行更多操作,请使用花括号。

正如已经说过的,我不确定要实现什么,但是我认为您可以删除complete for循环。编译器仍然会优化它。

然后打印cout << tokenString[1]; << endl;。我邀请您,您的向量没有2个要素,因此您正在打印随机无意义。在访问超出范围的值或使用at()之前,请检查向量的大小。

while(getline(myfile, line))
{
    //---------------------------------------------------------
    // tokenString is a String.
            // this is my function that using delimiter to separate the 
            // text file
    vector<string> tokenString = tokenizeString(line, "-");
    if (tokenString.size() > 1) {
        cout << tokenString[1]; << endl;

        //converting id string to int
        stringstream geek(tokenString[1]);
        geek >> a;
    }
    else {
        std::cerr << "Out of bounds\n";
    }
}