あなたは何をしようとしているのかをうまく説明しておらず、直面している問題についても説明していないので、以下は推測に基づいています。
だから、あなたがやろうとしているのは、次のような文字列を取ることです:
素早い茶色のキツネは、怠け者の犬を飛び越えました。
そして、それを次のような 2D 配列に入れます。
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
コードの 1 つの問題は、値を から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 .