gpt4 book ai didi

c++ - 如何将包含空格的字符数组读取为整数?

转载 作者:行者123 更新时间:2023-11-30 04:11:20 25 4
gpt4 key购买 nike

我正在尝试创建一个程序,从文本文件中读入并解决不完整的 9x9 数独板。其中一个板可能如下所示:

N
145369287
629785431
783412569
567148392
938527 14
214936758
851 74623
492853 76
376291845

我需要打印出读入的电路板,我只是通过使用 getline 并打印字符串来完成,然后将每个数字存储到一个数组中,可以将空白转换为零以供评估。如果我尝试以直接整数形式读取电路板,那么它会尝试将一行中的所有数字读取为一个整数,直到到达空格或换行符为止,如果我尝试使用 get() 逐个字符地读取它,我再次遇到换行问题,然后我必须将字符数组转换为整数数组以进行评估,我认为我也会遇到问题。到目前为止,这是我的代码,我认为使用 istringstream 会很方便,但后来意识到我必须有更多的 for 循环,所以没有它的解决方案将是理想的。不允许使用 vector 或花哨的模块或类似的结构,这是一个类分配。

#include <iostream>
#include <string>
#include <sstream>
#include <iomanip>
#include <fstream>

using namespace std;

int main() {

ifstream infile("sudoku_infile.txt");
ofstream outfile("sudoku_outfile.txt");
int board[9][9];
char n;
char c;
string str;
stringstream into;


while (infile >> n){

for (int i = 0; i < 9; i++)

for (int j = 0; j < 9; j++){

getline(infile, str);
cout << str << "\n";
into << str;
}
return 0;
}

编辑:好的,我自己设计了一个解决方案,尝试将字符转换为整数并将它们放入数组中,但它似乎不起作用:

        while (infile >> str){



for (int i = 0; i < 9; i++)

for (int j = 0; j < 9; j++){

getline(infile, str);
cout << str << "\n";

for (int z = 0; z < 9; z++){
if (isdigit(str[z])){

d = str[z] - '0';


}
else{
d = 0;
}

board[i][j] = d;
}
}

for (int m = 0; m < 9; m++){

for (int f = 0; f < 9; f++)
cout << board[m][f];
cout << endl;
}
}

我得到这个作为输出:

145369287
629785431
783412569
567148392
938527 14
214936758
851 74623
492853 76
376291845







































































071924836
555555555
555555555
555555555
555555555
555555555
555555555
555555555
555555555

最佳答案

您必须确保您的文件最多只包含 9*9 个字符 - 否则它会以这种方式超出范围 - 但在其中添加边界检查很容易。因为“0”在 ASCII 中从索引 48 开始,所以我正在计算 char 值减去魔数(Magic Number) 48。但是,您仍然必须自己添加对“”的检查(否则它会被初始化为 -16),但我相信您可以做到!

#include <iostream>
#include <string>
#include <iomanip>
#include <fstream>

int main(int argc, char **argv) {
std::ifstream infile("sudoku_infile.txt");
std::ofstream outfile("sudoku_outfile.txt");
int board[9][9];
size_t index = 0;
std::string str;
while (std::getline(infile, str)){
//std::cout << str << "\n";
for (size_t i = 0; i < str.size(); i++, index++){
board[index%9][index/9] = str[i] - '0';
}
}
return 0;
}

关于c++ - 如何将包含空格的字符数组读取为整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20281454/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com