我希望能根据给定的字符串生成ASCII艺术。
art.cpp
#pragma once
#include <string>
#include <vector>
#include "art.h"
std::string Art::display(std::string& text) {
std::string final_text;
final_text.reserve(text.length());
for (char letter: text) {
std::string single = letters[letter];
/* tried this */ single.erase(std::remove(single.begin(), single.end(), '\n'), single.end());
final_text += single;
}
return final_text;
}
art.h
#pragma once
#include <string>
#include <vector>
#include <map>
class Art {
public:
std::map<char, std::string> letters = {
std::make_pair('a', std::string(R"(
_
/ \
/ _ \
/ ___ \
/__/ \__\
)")),
std::make_pair('b', std::string(R"(
____
| __ )
| _ \
| |_) |
|____/
)")),
std::make_pair('c', std::string(R"(
____
/ ___|
| |
| |___
\____|
)")),
std::make_pair('d', std::string(R"(
____
| _ \
| | | |
| |_| |
|____/
)")),
std::make_pair('e', std::string(R"(
_____
| ____|
| _|
| |___
|_____|
)")),
std::make_pair('f', std::string("asdf")),
std::make_pair('g', std::string("asdf")),
std::make_pair('h', std::string(R"(
_ _
| | | |
| |_| |
| _ |
|_| |_|
)")),
std::make_pair('i', std::string("asdf")),
std::make_pair('j', std::string("asdf")),
std::make_pair('k', std::string(R"(
_ __
| |/ /
| ' /
| . \
|_|\_\
)")),
std::make_pair('l', std::string("asdf")),
std::make_pair('m', std::string("asdf")),
std::make_pair('n', std::string("asdf")),
std::make_pair('o', std::string(R"(
___
/ _ \
| | | |
| |_| |
\___/
)")),
std::make_pair('p', std::string("asdf")),
std::make_pair('q', std::string("asdf")),
std::make_pair('r', std::string(R"(
____
| _ \
| |_) |
| _ <
|_| \_\
)")),
std::make_pair('s', std::string("asdf")),
std::make_pair('t', std::string("asdf")),
std::make_pair('u', std::string("asdf")),
std::make_pair('v', std::string("asdf")),
std::make_pair('w', std::string("asdf")),
std::make_pair('x', std::string("asdf")),
std::make_pair('y', std::string(R"(
__ __
\ \ / /
\ V /
| |
|_|
)")),
std::make_pair('z', std::string("asdf"))
};
std::string display(std::string& text);
};
这段代码接收一个字符串引用,然后循环遍历每个字符,在映射表中查找该字符并获取其对应的ASCII艺术字母,然后将其添加到最终字符串中。
这会带来一个问题。当我想要打印Art::display()
返回的字符串时,它会将每个字符都打印在新行上。
我尝试了什么?我尝试删除换行符,但这样会混淆一些部分。
我想要它做什么?我想要它从左到右打印单词,而不是将每个字符都打印在新行上。
letters['a'][0] << letters['b'][0] << '\n' << letters['a'][1] << letters['b'][1] << '\n' << ...
。 - user4581301std::string[5]
,那么打印结果会更容易些。 - fabian