【发布时间】:2019-01-09 15:11:10
【问题描述】:
打印到控制台的内容:
START(0,0)
GOAL(0,2)
ooox
xxoo
ooox
我希望能够将 START 和 GOAL 点存储为子字符串中的整数,因为打印到控制台的内容是从外部文件中读取的。
我正在制作一个遍历二维网格的应用程序,其中x 表示被阻塞的路径,o 表示未阻塞。
我尝试使用.substr() 仅获取包含坐标对的字符串部分,并尝试使用std::stoi() 将String 类型转换为Int。
void Grid::loadFromFile(const std::string& filename){
std::string line, startPoint, goalPoint;
std::vector<std::string> grid;
int startX, startY, goalX, goalY;
std::ifstream file(filename);
if (!file.is_open()) return;
if (!std::getline(file, line)) return;
if (line.compare(0, 5, "START") != 0) return;
startPoint = line.substr(6,3);
startX = std::stoi(startPoint.substr(1,1));
startY = std::stoi(startPoint.substr(2,2));
if (!std::getline(file, line)) return;
if (line.compare(0, 4, "GOAL") != 0) return;
goalPoint = line.substr(5,3);
goalX = std::stoi(goalPoint.substr(1,1));
goalY = std::stoi(goalPoint.substr(2,2));
test = line.substr(7,1);
while (std::getline(file, line)) {
grid.push_back(line);
}
file.close();
std::cout << "Start: " << startPoint << "\n";
std::cout << "Goal: " << goalPoint << "\n";
std::cout << "Start X: " << startX << "\n";
std::cout << "Start Y: " << startY << "\n";
std::cout << "Goal X: " << goalX << "\n";
std::cout << "Goal Y: " << goalY << std::endl;
}
代码的预期结果是打印正确的startX/Y 和goalX/Y 值。
我得到的结果:
Start: 0,0
Goal: 0,2
Start X: 1
Start Y: 162010192
Goal X: 0
Goal Y: 1543563378
我不知道为什么我会得到返回的值,因为它们是随机的,并且对我如何获得这些值毫无意义。
【问题讨论】:
-
那么当你拿出你的调试器并单步执行程序时,你传递给 stoi 的参数是什么?
-
您检查过
startPoint.substr(2,2)的产量吗? -
您执行一个 getline(),然后检查“START”,然后假设下一行会以某种方式被读取。事实上,你需要第二个 getline()
标签: c++ c++11 type-conversion substring