矩阵 class 输入运算符重载 >> 在 C++ 中
Matrix class input operator overloading >> in C++
我创建了一个矩阵 class,其中包含点对象的向量向量(我创建的另一个 class)。矩阵中的每个点都是可走的或不可走的(矩阵实际上是一个迷宫)。 1 适合步行,0 不适合。
我想以这种形式获得矩阵:
4 4 //迷宫的大小(矩阵)
1 0 1 0(输入)
1 1 0 0(输入)
0 1 1 0(输入)
1 0 1 1(输入)
我试图逐行获取,然后通过流字符串将点(1s 和 0s)分开。这是我的代码:
istream & operator >> (istream& input, maze inMaze) {
string rowStream;
string tmpWord;
int num, colCounter; //num = 1 or 0, colCounter = col index
for (int rowIndex = 0; rowIndex < inMaze.rowsSize; rowIndex++){ //over the rows
int colIndex = 0;
bool isWalkable;
input >> rowStream; //input to string
stringstream seperateWord(rowStream); //string to stream string
while (seperateWord >> tmpWord) { //sstring seperate space bars in string, reprasant a row
if (tmpWord == "0") isWalkable = false; //in maze matrix, zero means not a path
else if (tmpWord == "1") isWalkable = true; //else 1 = a path
else throw "invalid input"; //wrong input (num in matrix not 0 nor 1)
inMaze.getMaze[rowIndex][colIndex].setPoint(rowIndex, colIndex, isWalkable); //set point in maze
colIndex++; //next col
} //done filling a row, to next row
}
}
没用。它总是在第一行之后结束获取输入,并用 1 填充所有内容。
我做错了什么?
感谢您的帮助!对不起我糟糕的英语.. :-)
第input >> rowStream;
行的问题替换为getline(input,line);
和line
是string
类型。
文件的运算符>>
取一个以白色结尾的参数space!
喜欢:00 1 0 11
,第一个参数是 00
,第二个是 1
...
在你的情况下使用 stringstream
这意味着你必须把整个 line
喜欢:0 1 0 1 0 1
,使用 getline 获取它,然后使用 stringstream
获取正确的输入。 0
然后 1
...
我创建了一个矩阵 class,其中包含点对象的向量向量(我创建的另一个 class)。矩阵中的每个点都是可走的或不可走的(矩阵实际上是一个迷宫)。 1 适合步行,0 不适合。 我想以这种形式获得矩阵: 4 4 //迷宫的大小(矩阵) 1 0 1 0(输入) 1 1 0 0(输入) 0 1 1 0(输入) 1 0 1 1(输入)
我试图逐行获取,然后通过流字符串将点(1s 和 0s)分开。这是我的代码:
istream & operator >> (istream& input, maze inMaze) {
string rowStream;
string tmpWord;
int num, colCounter; //num = 1 or 0, colCounter = col index
for (int rowIndex = 0; rowIndex < inMaze.rowsSize; rowIndex++){ //over the rows
int colIndex = 0;
bool isWalkable;
input >> rowStream; //input to string
stringstream seperateWord(rowStream); //string to stream string
while (seperateWord >> tmpWord) { //sstring seperate space bars in string, reprasant a row
if (tmpWord == "0") isWalkable = false; //in maze matrix, zero means not a path
else if (tmpWord == "1") isWalkable = true; //else 1 = a path
else throw "invalid input"; //wrong input (num in matrix not 0 nor 1)
inMaze.getMaze[rowIndex][colIndex].setPoint(rowIndex, colIndex, isWalkable); //set point in maze
colIndex++; //next col
} //done filling a row, to next row
}
}
没用。它总是在第一行之后结束获取输入,并用 1 填充所有内容。 我做错了什么?
感谢您的帮助!对不起我糟糕的英语.. :-)
第input >> rowStream;
行的问题替换为getline(input,line);
和line
是string
类型。
文件的运算符>>
取一个以白色结尾的参数space!
喜欢:00 1 0 11
,第一个参数是 00
,第二个是 1
...
在你的情况下使用 stringstream
这意味着你必须把整个 line
喜欢:0 1 0 1 0 1
,使用 getline 获取它,然后使用 stringstream
获取正确的输入。 0
然后 1
...