您没有很好地描述您正在尝试做的事情,您还没有描述您遇到的问题,因此以下内容只是基于猜测。
所以看起来你想要做的是采用如下字符串:
敏捷的棕色狐狸跳过了懒惰的狗。
并将其放入二维数组中,例如:
0 1 2 3 4 5 6 7 8
0 T h e q u i c k
1 b r o w n f o
2 x j u m p e d
3 o v e r t h e
4 l a z y d o g s
5 . x x x x x x x x
6 x x x x x x x x x
7 x x x x x x x x x
8 x x x x x x x x x
您的代码有一个问题是,当您将值复制w
到s
其中时,您并不能确保索引p
实际上在范围内。您似乎已尝试在以下行中处理此问题while(p != w.size())
;但这是一个外部循环,不能防止p
超出范围并在内部循环中使用。相反,您必须p++; if (p==w.size()) break;
在最里面的循环中放置类似的东西 increment p
。或者更好的是,您应该遍历字符串而不是数组。类似于以下伪代码的内容将替换您的整个while(p){for(k){for(j){}}}
循环集。:
for(size_t i=0; i<w.size(); ++i) {
int k = compute target row from i
int j = compute target column from i
s[k][j] = w[i]
}
此外,这里有一些代码可以在您调试时更好地可视化数组。
#include <iostream>
int main() {
char s[9][9] = {"The","quick","brown","fox","jumped","over","the","lazy","dogs."};
// your code to get input and copy it into the array goes here
//
// for(size_t i=0; i<w.size(); ++i) {
// int k = compute target row from i
// int j = compute target column from i
// s[k][j] = w[i]
// }
std::cout << " 0 1 2 3 4 5 6 7 8\n";
for (int i=0; i<9; ++i) {
std::cout << i;
for (int j=0; j<9; ++j)
std::cout << ' ' << s[i][j];
std::cout << '\n';
}
}
如果您在不做任何更改的情况下运行此程序,则输出应如下所示:
0 1 2 3 4 5 6 7 8
0 T h e
1 q u i c k
2 b r o w n
3 f o x
4 j u m p e d
5 o v e r
6 t h e
7 l a z y
8 d o g s .