c++ - 如何将字符串转换为字符矩阵
问题描述
我想将一个字符串放入一个 char nxn 矩阵,这使得该字符串"abcdefghi"
成为一个3x3
char 矩阵,并成为 {abc;def;ghi} 但它没有保存正确。
我尝试在第一个循环中输出 every i
, j
, ch[i][j]
and 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;
,但行不以 a 结尾'\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# - 在 WPF 中关闭事件后保持应用程序运行
- nettopologysuite - LineString 长度计算的 .NET TopologySuite 和 ProjNet 问题
- arrays - 连续数组
- bash - EOF 块中的 Bash EOF 块可能吗?
- php - php函数htmlspecialchars不起作用
- python - 如果在__main__中调用python闭包,闭包仍然可以访问函数中的变量。这怎么可能?
- iphone - 与 iOS 应用程序和 Garmin Watch 连接
- android - ARM 上的 Android 模拟器:系统映像
- angular - 如何仅在 mat-stepper 上显示索引?
- r - R中一个时间段的平均价格