我想把一个字符串放到一个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. 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;
}
关于c++ - 如何将字符串转换为字符矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55347757/