我想把一个字符串放入一个char nxn矩阵,这使得字符串"abcdefghi"
成为一个3x3
字符矩阵,并成为{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. 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;
}