c++ - 填充字符串数组或 char* 数组的问题

标签 c++ arrays string

非常基本的 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/

相关文章:

c++ - 如何优化它[C++]?

c - 数组初始值设定项中有多余的元素可以吗?

javascript - 如何更新数组、对象内、数组内的数组?

c - 基于\0 终止的循环无法正常工作?

c++ - 如何在 C++ 中更改控制台上特定输出的颜色

c++ - 在 MFC 中显示 XML 的最佳方式?

c++ - Xcode 中没有可行的重载 '=' 错误(Eclipse 未显示错误)

c - c函数中的二维数组更新

arrays - 串叉积

java - 非触发 if 语句