非常基本的 C++ 问题。看来我真的生锈了...
我想要做的就是从文件中读取 X 字符串数组,并创建 X 垂直字符串数组的水平字符串。
即:
文件包含:
azert
qsdfg
wxcvb
poiuy
mlkjh
我想创建一个包含以下内容的字符串数组:
aqwpm
zsxol
edcol
rfvuj
tgbyh
到目前为止,这是我尝试过的:
[bad code]
const int SIZE = 37;
std::string table_h[SIZE];
std::string table_v[SIZE];
int i = 0;
while (source >> table_h[i]) //,sizeof table_h[i]
{
for (int j = 0; j< SIZE; j++)
{
table_v[j][i] = table_h[i][j];
}
i++;
}
-> 在第一行工作正常,当 i=1 时中断。我不明白什么。
我注意到虽然 table_v[0][0] = 'f';
工作正常。
table_v[0][36] = 'f';
和 table_h[0].at(36);
都中断了。
使用 char *
(这是我的第一个想法),
char * table_h[SIZE];
char * table_v[SIZE];
有点像
table_v[0][0] = 'f';
立即中断。 我想我需要先分配内存或初始化一些东西??
提前致谢。
最佳答案
在使用 operator []
访问它们之前,您应该设置字符串的大小。 table_h
的大小调整是可选的,但您肯定必须调整 table_v
的大小。
const int SIZE = 37;
std::string table_h[SIZE];
std::string table_v[SIZE];
for (size_t i = 0; i < SIZE; ++i)
{
table_h[i].resize(SIZE);
table_v[i].resize(SIZE);
}
int i = 0;
while (source >> table_h[i])
{
for (int j = 0; j < SIZE; j++)
{
table_v[j][i] = table_h[i][j];
}
i++;
}
参见 working example .
在我看来,如果您知道字符串的大小,调整大小比追加更好。它可以节省一些内存重新分配,而且恕我直言,它只是更好的解决方案。
关于c++ - 填充字符串数组或 char* 数组的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29162141/