我正在处理一个问题,要求我将包含单词拼图的.txt文件读入char类型的2D数组并输出找到的单词。 我在阅读拼图时遇到了麻烦。这是我现在使用的代码,用于读取.txt文件并打印尺寸和拼图本身:
ifstream in("puzzle.txt");
string line;
if (in.fail())
{
cout << "Failed to open puzzle." << endl;
exit(1);
}
int nrows = 0;
int ncols = 0;
getline(in, line);
ncols = line.size();
++nrows;
while(getline(in, line))
++nrows;
in.close();
cout << nrows << ", " << (ncols+1)/2 << endl;
// putting puzzle into a vector of vectors(2D array)
char A[nrows][ncols];
int r = 0;
int c = 0;
char ch;
in.open("puzzle.txt");
while (in >> ch)
{
A[r][c] = ch;
if (++c >= ncols)
{
c = 0;
++r;
}
}
A[r][c] = 0;
for (int r = 0; r < nrows; ++r)
{
for (int c = 0; c < ncols; ++c)
cout << A[r][c] << " ";
cout << endl;
}
现在有了这个代码,它似乎首先读了所有的字符,但随后是奇怪的字符。
结果看起来像8x8拼图:
8,8
r d z t t t t t t t k n n t t
d b b a r o o k e l a h w
a a c j i e p n d k s d e o e
m z i h z i y l a t x i s h h
e e l sJ≡o`:≡oαJ≡
o¿■`VΩo
h ²
` αJ≡oÇ
╢ 5 ╛ s ] 6 @ α J ≡ o
这个谜题以“e e l s”结尾。我不想要其余的。
另一个问题是,除了有奇怪的字符外,这个拼图还没有根据当前尺寸打印,每行只有8个字符。
我已经阅读了有关插入空字符的解决方案,但我仍然不太确定如何使用2D字符数组。
谢谢!
答案 0 :(得分:1)
ncols
变量未获得您希望它拥有的值。因为line.size()
返回数组的完整大小,包括分隔符。因此,双维数组填充错误的列数,最后一些行留下初始随机字符。
答案 1 :(得分:0)
当您阅读每个字符时,您不会跳过每行末尾的换行符。您可以使用cin.ignore()
跳过它。
for (int r = 0; r < nrows; ++r) {
for (int c = 0; c < ncols; ++c) {
cin >> A[r][c];
}
cin.ignore();
}