You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++开发ASCII艺术字生成器如何实现字符横向拼接不换行

问题原因

你当前的拼接逻辑是把单个字符的整个ASCII艺术字(包含所有换行符)直接追加到结果中,输出自然会是第一个字符占完所有行之后才显示第二个字符;直接删除换行符又会把同一字符的不同行挤在一起,导致结构错乱。要实现横向拼接,核心逻辑是按行拼接:先把所有字符的第一行拼在一起,再拼所有字符的第二行,以此类推。


解决步骤

  1. 首先统一所有ASCII艺术字的高度,你当前已实现的字母都是5行高度,剩下标注asdf的占位字符也需要补充为同样5行的结构,保证所有字符的行数一致。
  2. 修改display方法实现:先把每个字符的艺术字拆分为单独的行存储,再逐行拼接所有字符的对应行。

修改后代码

art.cpp

#include <string>
#include <vector>
#include <sstream>
#include <algorithm>
#include <cctype>
#include "art.h"

// 辅助函数:把单个字符的艺术字按换行拆成行列表
std::vector<std::string> split_lines(const std::string& s) {
    std::vector<std::string> lines;
    std::string line;
    std::istringstream iss(s);
    while (std::getline(iss, line)) {
        // 按实际字符宽度调整,统一补全每行长度避免错位
        const int MAX_CHAR_WIDTH = 8;
        if (line.size() < MAX_CHAR_WIDTH) {
            line += std::string(MAX_CHAR_WIDTH - line.size(), ' ');
        }
        lines.push_back(line);
    }
    // 不足5行的补空行,保证所有字符高度统一
    while (lines.size() < 5) {
        lines.push_back(std::string(8, ' '));
    }
    return lines;
}

std::string Art::display(std::string& text) {
    // 先把所有字符的行拆分存储
    std::vector<std::vector<std::string>> all_chars;
    for (char c : text) {
        // 转小写适配当前map的key,需要支持大写可自行补充映射
        char lower_c = std::tolower(c);
        if (letters.count(lower_c)) {
            all_chars.push_back(split_lines(letters[lower_c]));
        } else {
            // 未定义的字符补空格占位
            all_chars.push_back(std::vector<std::string>(5, std::string(8, ' ')));
        }
    }

    std::string final_text;
    const int total_lines = 5; // 统一艺术字高度
    for (int i = 0; i < total_lines; i++) {
        // 拼接所有字符的第i行
        for (auto& char_lines : all_chars) {
            final_text += char_lines[i];
            // 要加字符间距的话可以在这里补空格:final_text += "  ";
        }
        final_text += '\n';
    }
    return final_text;
}

注意事项

  • 当前map里用"asdf"占位的字符需要替换为对应5行的ASCII艺术字,否则会显示异常
  • MAX_CHAR_WIDTH可以根据你实际设计的字符宽度调整,保证每个字符的每一行宽度一致,拼接出来才不会错位
  • 需要字符之间留间距的话,可以在拼接每行的时候追加1-2个空格即可

内容的提问来源于stack exchange,提问作者noah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 03:09:02