古风排版

古风排版


一、目的

-掌握vector用法
-掌握cin.get的用法

二、实验内容与设计思想

古风排版

中国的古人写文字,是从右向左竖向排版的。本题就请你编写程序,把一段文字按古风排版。

输入格式:
输入在第一行给出一个正整数N(<100),是每一列的字符数。第二行给出一个长度不超过1000的非空字符串,以回车结束。

输出格式:
按古风格式排版给定的字符串,每列N个字符(除了最后一列可能不足N个)。

输入样例:
4
This is a test case
输出样例:
asa T
st ih
e tsi
ce s
函数相关伪代码

1.动态数组a
2.字符单个输入
3.获得字符长度
4.循环数组并判断是否输出

函数代码

#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main() {
    vector<char> a;
    int i = 0, s, m, l, j, p, h,k=0,y;
    char ch;
    cin >> s;
    cin.get();
    while (cin.get(ch) && ch != '\n') {
        a.push_back(ch);
    }
    l = a.size() / s;
    j = a.size();
    if (a.size() % s != 0) {
        l = l + 1;
    }
    h = j % s;
    for (i = 0;i < s;i++) {//行
        y = 0;
        if (i< h||h==0) {
            p = 0;
        }
        else {
            p = 1;
            cout << " ";
            y = 1;
        }
        if (h != 0) {
            j = a.size() / s * s + i;
        }
        else {
            j = a.size() - s+i;
        }
            for (;p < l;p++) {//列
                    if (y==1) {
                        j = j - s;
					}
                    y = 1;
                cout << a[j];
            }
        cout << endl;
    }
    return 0;
}

时间复杂度O(n),空间复杂度O(1)

三、实验使用环境

以下请根据实际情况编写

  • 操作系统:Windows 11专业版
  • 编程语言:C++
  • 开发工具:[Visual Studio 2022]

四、实验步骤和调试过程

古风排版

本机运行截图


五、实验小结

遇到的问题及解决方法:

  1. 问题:输入字符未正确处理
  • 解决方法:优化代码,修改输入方法

实验体会和收获:

这段代码的主要功能是实现一个字符的转置输出。首先,程序通接收一个int s,表示输出时一列有几个字符。接着,通过cin.get(单字符输入)输入一行字符,将这些字符存储在数组a中。先确定会有几列,由于最后一列可能不够,需要单独考虑这种情况,行由s已经可以确定。在输出部分,程序通过两层循环实现题目要求。外层循环变量i表示行数,故要小于s,内层循环变量p实际上可表示列数。由于第一列(实际是最后一列)输出会不够,需要用空格来表示,此时空格就占据了一列,因此p的初始值可能为0,也可能为1,这需要用h(余数)来判断。当前列索引i小于余数h,则从后向前输出字符,否则先输出一个空格,再从后向前输出字符。这样,就实现了题目要求。由于是从后向前输出方式,我就直接动过判断使j的初始值在每一行要输出的第一个下标,直接减s,来表示这一行中的输出,由此要加个条件使第一次进入循环时不减.

posted @ 2025-04-17 20:33  穗和  阅读(22)  评论(0)    收藏  举报