当我尝试编译时,我得到上面显示的错误,我不知道如何解决这个问题。我对C ++很陌生,所以请随意摧毁一切,因为我将从建议中学习。
输入:
.............
.............
..XXX.....X..
..XXX.....X..
..XXX........
..XXX........
..XXXXXXX....
..XXXXXXX....
..XXXXXXX....
.............
.............
输出:
.............
.............
..OOO.....O..
..OOO.....O..
..OOO........
..OOO........
..OOOOOOO....
..OOOOOOO....
..OOOOOOO....
.............
.............
如果我改变它而不是
if (board[i][j] == older) {
board[i][j] = newer;
我愿意。
if (board[i][j] == "X") {
board[i][j] = "0";
它有效
#include <fstream>
#include <iostream>
#include <cstdlib>
#include <vector>
int main(int argc, char* argv[]) {
std::ifstream in_str(argv[1]);
//Check that the file was properly opened
if (!in_str.good()) {
std::cout << "Can't open " << argv[1] << " to read.\n";
return (1);
}
std::string value;
std::vector<std::string> board;
while (in_str >> value) {
board.push_back(value);
}
if (argv[3] == std::string ("replace")) {
std::string older(argv[4]);
std::string newer(argv[5]);
for (unsigned int i = 0; i < board.size(); i++) {
for (unsigned int j = 0; j < board[0].size(); j++) {
if (board[i][j] == older) {
board[i][j] = newer;
}
}
}
答案 0 :(得分:1)
由于board
定义为:
std::vector<std::string> board;
board[i][j]
评估为char&
。
由于older
和newer
被定义为:
std::string older(argv[4]);
std::string newer(argv[5]);
以下是错误的:
board[i][j] == older
board[i][j] = newer;
您无法将std::string
与char
进行比较,也无法将std::string
分配给char
。
以下也是错误的:
board[i][j] == "X"
board[i][j] = "O";
您无法将char const*/char*/char [2]
与char
进行比较,也无法将此类对象分配给char
。
您可以使用:
board[i][j] == older
board[i][j] = newer;
如果older
和newer
属于char
类型。我建议将这些变量的声明更改为:
char older = argv[4][0];
char newer = argv[5][0];
答案 1 :(得分:0)
棋盘矩阵中的任何项目都是char。 和更旧和更新是字符串(char *) 在 if(board [i] [j] == old) 您尝试比较char *和char的代码 将旧的和更新的设置为char而不是字符串
答案 2 :(得分:0)
要解决此问题,您可以与older[0]
和newer[0]
进行比较,因为它们会返回对char应该有效的参考值。
正如其他人所指出的,截至目前,您将字符串对象与单个字符串进行比较是有问题的。但是较旧的[0] /较新[0]将返回对char的引用。