输入&显示二维字符数组C ++

时间:2014-04-30 16:00:28

标签: c++ arrays

我需要读取用户输入文件(所有数字的14 x 28文本文件),作为二维字符数组。我认为我已经完成了这段代码:

getline(cin, fileName);
cout << "\n";
infile.open(fileName.c_str());
if (infile.is_open())
for (int i = 0; i < 14; i++)
    for (int j = 0; j < 28; j++)
        infile >> map[i][j];
cout << map[14][28];

但是,使用此代码,我似乎无法将数组发送到输出以供查看。当我尝试查看数组的内容时,程序返回一个看起来像e的奇怪符号......这似乎不是一个内存地址所以我不确定这个数字是什么。

我还需要将地图数组中的数字表示为字母。例如0为a',a 1为'*',2为“W”,3为“k”。

我不确定如何对数组进行编码,以便在显示内容时数字显示为字母。

总而言之,
      1.如何正确输入二维字符数组?
      2.如何编码此数组,使其数字用字母表示?
      3.如何在输出中显示此数组?

感谢任何帮助!

由于

2 个答案:

答案 0 :(得分:0)

如果map声明为

            char map[14][28];

然后声明

           cout<< map[14][28];

应该崩溃。由于映射的最后一个有效索引是[13] [27](数组索引是基于0)并且您正在尝试访问超出范围的内存。要显示所有字符,您应该使用类似于输入的循环。

答案 1 :(得分:0)

创建另一个循环,类似于您在map中读取的循环:

for (int i = 0; i < 14; i++) {
    for (int j = 0; j < 28; j++) {
        cout << map[i][j] << ","; // You can use a comma or whatever you want, like a space, etc.
    }
    cout << endl; // So each row is broken up, else it will all be on a single long line
}

如果你创建了一个Map类,你可以覆盖<<运算符,这样就可以像上面的例子那样输出cout << myMap,如果你决定改变它的外观,你只能需要在一个位置(Map类内)更改它。

我看到你更新了原帖。

打印出来时看到异常字符的一个原因是,char数组显示为ASCII等效字符而不是数值。如果您想查看实际数字,则必须将其强制转换为(int)

for (int i = 0; i < 14; i++) {
    for (int j = 0; j < 28; j++) {
        cout << (int)map[i][j];
    }
    cout << endl;
}

输出时,您可以在打印前检查每个值:

for (int i = 0; i < 14; i++) {
    for (int j = 0; j < 28; j++) {
        if (map[i][j] == 0) cout << " ";
        else if (map[i][j] == 1) cout << "*";
        else if (map[i][j] == 2) cout << "W";
        else if (map[i][j] == 3) cout << "k";
        else cout << (int)map[i][j];
    }
    cout << endl;
}

if...else if更改为switch语句是另一种选择,甚至可以创建包含以下结构的“替换数组”:

string replacement = " *Wk";

然后检查是否map[i][j] < 4。如果评估为true,则使用

if (map[i][j] < 4) {
    cout << replacement[ map[i][j] ];
else
    cout << (int)map[i][j];