我想将一个字符串放入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}
答案 0 :(得分:1)
您的代码有两个问题:
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;
}