我想用 C++ 编写类似 2d 字符串的东西。
我试过:
vector< vector<string> > table;
int m,n,i,j;
string s;
cin>>n>>m;
for(i=0;i<n;i++) {
for(j=0;j<m;j++) {
cin>>s;
table[i][j] = s;
}
}
cout << "\n\n\n\n";
for(i=0;i<n;i++) {
for(j=0;j<m;j++) {
cout<<table[i][j]<<" ";
}
cout<<"\n";
}
没有编译错误,但是当我输入如下输入时:
10 20
.....#..............
.....#..............
.....#..............
.....#..............
######..............
.......###..........
.......#.#..........
.......###...#######
.............#.....#
.............#######
它给了我段错误。为什么 ?怎么了 ?以及它应该如何做才能正常工作?谢谢你。
最佳答案
这个问题似乎暗示所需的数据结构是一组 n
行,每个行都有 m
字符。有两种方法可以考虑这一点——作为 nxm
字符矩阵,或作为 n
m
字符 vector (字符串与 vector<char>
相似但不完全相同)。
所以看起来你不想要 vector
的 vector
s 的 string
,你想要 vector
的 vector
的 char
,或者只是 vector
的 string
。
无论如何,您必须在使用 table[i][j] 或(稍微更惯用的 c++,但在这种情况下没有必要,因为 m
和 n
是事先知道的)之前分配适当的空间量,使用类似 push_back
的东西添加到结束。
还要注意 cin>>s
从 stdin
读取整行(我认为这使得 vector<string>
解决方案更容易处理)。