Как преобразовать строку в символьную матрицу - PullRequest
0 голосов
/ 26 марта 2019

Я хочу поместить строку в матрицу char nxn, которая превращает строку "abcdefghi" в матрицу 3x3 char и становится {abc; def; ghi}, но не сохраняет права.

Я пытаюсь вывести каждые i, j, ch[i][j] и s[j+i*3] в первом цикле, и они выглядят правильно, но в конечном выводе все идет не так.

#include <iostream>
#include <algorithm>
#include <string>

using namespace std;

int main()
{
    char ch[2][2];
    string s = "abcdefghi";
    int i, j;
    for (i = 0; i < 3; i++)
    {
        for(j = 0; j < 3; j++)
        {
            ch[i][j] = s[j + i * 3];
        }
    }

    for (i = 0; i < 3; i++)
    {
        cout << ch[i] << endl;
    }
    return 0;
}

Я хочу, чтобы матрица ch стала {abc; def; ghi}, но на выходе получилось {abdegi; degi; gi}

1 Ответ

1 голос
/ 26 марта 2019

Ваш код имеет две проблемы:
1. char ch[2][2]; должен быть char ch[3][3];
2. Вы предполагаете, что можете напечатать всю строку с одним cout << ch[i] << endl;, но строки этого не делаютоканчивается на '\0', поэтому cout печатает все, пока не достигнет нуля.

Вот исправленная версия:

#include <iostream>


int main()
{
    char ch[3][3];
    auto s = "abcdefghi";
    auto* ptr = s;
    for (auto& r1 : ch)
    {
        for (auto& r2 : r1)
        {
            r2 = *ptr++;
        }
    }

    for (const auto& r1 : ch)
    {
        for (auto r2 : r1) // char is trivial to copy
        {
            std::cout << r2;
        }
        std::cout << '\n';
    }
    std::cout << std::flush;
    return 0;
}
...