【问题标题】:How to convert a string into a char matrix如何将字符串转换为字符矩阵
【发布时间】:2019-08-16 06:46:09
【问题描述】:

我想将一个字符串放入一个char nxn矩阵,这使得字符串"abcdefghi"变成一个3x3 char矩阵,并变成 {abc;def;ghi} 但保存不正确。

我尝试在第一个循环中输出每个ijch[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}

【问题讨论】:

  • 可能最终输出有误?

标签: c++ arrays string multidimensional-array


【解决方案1】:

您的代码有两个问题:
1.char ch[2][2];应该是char ch[3][3];
2. 您假设您可以使用单个 cout &lt;&lt; ch[i] &lt;&lt; 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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-14
    • 1970-01-01
    • 2020-08-14
    • 1970-01-01
    • 2019-09-15
    相关资源
    最近更新 更多