您还没有描述你想要什么做的非常好,你有没有描述了你遇到的问题,所以以下是基于猜测。
所以看起来你正在试图做的是采取类似的字符串:
敏捷的棕色狐狸跳过了懒惰的狗。
并将它放入一个二维数组,如:
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;
之内放置最内层的循环,你可以增加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 .
它会产生什么输出和你所期望的输出?请更具体地说。 – Lion
嗯,我希望它输出从字符串w到2-D字符数组s的所有东西。你能帮我解决这个问题吗?谢谢。 – user1567909
确保您的字符串'w'获得成功读取且包含足够的元素(至少81)。在输出中,可能需要在打印9个字符后插入换行符。 ...并回答你上次评论的问题:是的,我们可以做你的功课,但这不会帮助你。 –