解析字符串会导致重复的值

时间:2014-01-19 20:11:25

标签: c++ string parsing

我有一个字符串,其中包含任意数量的整数和任意数量的数字,我需要将每个整数解析为程序先前分配的矩阵元素。由于某种原因,当给出新字符串时,输出会复制字符串的最后几位,如下所示:

data.txt中

1 4 5 6 8
5 5 5 5 5
3 3 3 3 3
1 1 1 1 1

程序输出:

1 4 5 6 5
5 5 5 5 3
3 3 3 3 1
1 1 1 1 1

我可以看到每一行的最后一个元素被下一行的第一个元素覆盖,但我不知道为什么这样做。这是相关的代码:

    while(getline(inFile, readIn)) {
        parse(readIn, mtrx, r);
        r++;
    }

//......

void parse(string str, matrix& mtrx, int r)
{
    string value = "";
    str.append("*");
    int i=0;                        //finds integers in string
    int c=0;                        //place holders for columns
    while( i < str.length() ) {
        value = "";
        while( str[i] != ' ' && str[i] != '*' ) {
            value += str[i];
            i++;
        }
        mtrx.set(r,c, atoi(value.c_str()));
        c++;
        i++;
    }
}

1 个答案:

答案 0 :(得分:2)

看起来你的mtrx只是4x4元素,因为在C ++中默认没有数组边界测试,所以你可以读取超出界限。在写入行的最后一个元素时,会编写下一行的第一个元素,在写下一行时会覆盖该元素。读取行的最后一个元素时,将读取下一行的第一个元素。最后一行中的最后一个元素是可以的,因为你已经超出了数组本身并读回了它,但这可能会引起一些有趣的其他问题。