C++ 字符串排列输出程序代码解析
C++ 字符串排列输出程序代码解析
程序功能: 将输入的字符串按照指定的行数进行排列,然后逐列输出。
设计思路:
- 首先读取输入的行数 n 和字符串 str。
- 初始化一个二维字符数组 a,大小为 105*105,并将所有元素初始化为空格字符。
- 计算字符串 str 的长度 len,并根据 n 计算出列数 m。
- 遍历字符串 str,按照指定的行数 n 将字符依次填入二维数组 a 中。
- 逐列输出二维数组 a 中的字符。
程序结构说明:
- 首先包含
<iostream>和<string>头文件。 - 使用
using namespace std;来避免重复使用std::。 - 主函数
main()中,定义变量 n、m 和 len,以及字符数组 a 和字符串 str。 - 读取输入的行数 n,并使用
getchar()读取换行符。 - 使用
getline(cin, str)读取输入的字符串。 - 使用两层循环对二维数组 a 进行初始化,将所有元素置为空格字符。
- 判断字符串长度 len 是否能整除 n,若能则计算出列数 m,否则列数为 len/n+1。
- 使用两层循环遍历字符串 str,按照指定的行数 n 将字符依次填入二维数组 a 中。
- 使用两层循环逐列输出二维数组 a 中的字符。
- 返回 0,表示程序正常结束。
示例代码:
#include<iostream>
#include<string>
using namespace std;
int main()
{
int n,m,len;
char a[105][105];
string str;
cin >> n;
getchar();
getline(cin,str);
//对二维数组初始化
for(int i=0;i<105;i++)
for(int j=0;j<105;j++)
a[i][j]=' ';
len=str.size();
if(len%n==0)
m=len/n;
else
m=len/n+1;
//n行m列
for(int i=0;i<n;i++)
{
int k=0;
for(int j=i;j<len;j+=n)
{
a[i][k]=str.at(j);
k++;
}
}
for(int i=0;i<n;i++)
{
for(int j=m-1;j>=0;j--)
cout << a[i][j];
cout << endl;
}
return 0;
}
解释:
- 代码首先定义了必要的变量,包括行数 n、列数 m、字符串长度 len、二维字符数组 a 和字符串 str。
- 然后读取输入的行数 n 和字符串 str。
- 使用两层循环对二维数组 a 进行初始化,将所有元素置为空格字符。
- 计算字符串长度 len 并根据 n 计算出列数 m。
- 使用两层循环将字符串 str 中的字符按照指定的行数 n 填入二维数组 a 中。
- 最后使用两层循环逐列输出二维数组 a 中的字符。
注意:
- 代码中二维数组 a 的大小为 105*105,可以根据需要进行调整。
- 该代码只考虑了字符串长度 len 能被行数 n 整除的情况,如果不能整除,则会将剩余的字符填入最后一列。
总结:
该程序通过二维数组来存储字符串,并根据指定的行数进行排列,最终实现将字符串逐列输出的功能。代码结构清晰,易于理解,并附带详细的注释和解释。
原文地址: http://www.cveoy.top/t/topic/p6n3 著作权归作者所有。请勿转载和采集!