C++ “打印”;“你好”;用大写字母?
如果每个字母高7个字符,宽5个字符,如何用大字体打印“HELLO” 我想到这样印刷:C++ “打印”;“你好”;用大写字母?,c++,C++,如果每个字母高7个字符,宽5个字符,如何用大字体打印“HELLO” 我想到这样印刷: H H EEEEE L L OOOOO H H E L L O O H H E L L O O HHHHH EEEEE L L O O H H E L L O O H
H H EEEEE L L OOOOO
H H E L L O O
H H E L L O O
HHHHH EEEEE L L O O
H H E L L O O
H H E L L O O
H H EEEEE LLLLL LLLLL OOOOO
但我不知道如何将一个字符打印在另一个字符的旁边。我试着打印H和E,但它们不是水平的。它们是垂直的
这是我的密码:
int problem4_4()
{
int i;
for(i=0;i<7;++i)
{
if(i==3)
cout<<"HHHHH\n";
else
cout<<"H H\n";
}
for(i=7;i<14;i++)
{
if(i==7||i==10||i==13)
cout<<"EEEEE\n";
else
cout<<"E\n";
}
return 0;
}
int problem4_4()
{
int i;
对于(i=0;i提示:每个字母的大小相同,所以让自己成为一个“字母”数组:每个字母都是组成字母的二维字符数组
现在,当你去打印时,说“你好”,你可以打印每个字母的第一行,然后是换行符,然后是每个字母的第二行,然后是另一个换行符,等等
希望这有帮助。这里是@Kevin建议的方法示例
std::vector<std::string> v;
v.push_back("H H EEEEE L L OOOOO");
v.push_back("H H E L L O O");
v.push_back("H H E L L O O");
v.push_back("HHHHH EEEEE L L O O");
v.push_back("H H E L L O O");
v.push_back("H H E L L O O");
v.push_back("H H EEEEE LLLLL LLLLL OOOOO");
for (auto row : v)
{
for (auto col : row)
cout << col;
cout << endl;
}
对于初学者来说,这是一个稍微复杂的版本,但不太复杂。它将打印任意字符串(使用命令行参数调用),并且可以简单地扩展到新的字形,甚至新的编码。它将字形信息存储在一个无序的\u映射中,即哈希表:
#include <array>
#include <cstdlib>
#include <iostream>
#include <string>
#include <unordered_map>
using std::cout;
using ctype = char;
static constexpr unsigned rows = 7;
using letter_t = std::array< std::string, rows >;
using glyph_table = std::unordered_map< ctype, letter_t >;
const glyph_table& create_glyphs()
{
// Returns a reference to a singleton.
static glyph_table glyphs;
static bool ran = false;
if (!ran) { // Skip this step if called again.
glyphs.emplace( 'H', letter_t({
"H H",
"H H",
"H H",
"HHHHH",
"H H",
"H H",
"H H" })
);
glyphs.emplace( 'E', letter_t({
"EEEEE",
"E ",
"E ",
"EEEEE",
"E ",
"E ",
"EEEEE" })
);
glyphs.emplace( 'L', letter_t({
"L ",
"L ",
"L ",
"L ",
"L ",
"L ",
"LLLLL" })
);
glyphs.emplace( 'O', letter_t({
" OOO ",
"O O",
"O O",
"O O",
"O O",
"O O",
" OOO "})
);
glyphs.emplace( 0, letter_t({
"? ??",
"??? ?",
"??? ?",
"?? ??",
"?? ??",
"?????",
"?? ??" })
);
ran = true;
} // end if
return glyphs;
}
int main( int argc, const char *argv[] )
{
const char* const message = (argc > 1) ? argv[1] : "HELLO";
const glyph_table& glyphs = create_glyphs();
for ( unsigned i = 0; i < rows; ++i ) {
for ( unsigned j = 0; j < 22 && message[j]; ++j ) {
// Look up the glyph for the jth character of message, or if that isn't in the table, the glyph stored under the null character.
const letter_t& g = glyphs.count(message[j]) ? glyphs.find(message[j])->second : glyphs.find(0)->second;
/* The syntax to get a reference to the value indexed by a key from an iterator returned by find() is a little baroque for a STL hash table.
*/
// Print its ith row:
cout << ' ' << g[i];
}
cout << '\n';
}
return EXIT_SUCCESS;
}
#包括
#包括
#包括
#包括
#包括
使用std::cout;
使用ctype=char;
静态constexpr无符号行=7;
使用字母_t=std::array;
使用glyph_table=std::无序映射;
常量符号表&创建符号()
{
//返回对单例的引用。
静态图示符\表格图示符;
静态bool-ran=false;
如果(!ran){//再次调用时跳过此步骤。
铭文.安放('H',字母\u t({
“H”,
“H”,
“H”,
"hhh",,
“H”,
“H”,
“H”})
);
雕文安放('E',字母\u t({
“EEEEE”,
“E”,
“E”,
“EEEEE”,
“E”,
“E”,
“EEEEE”})
);
标志符号安放('L',字母\u t({
“L”,
“L”,
“L”,
“L”,
“L”,
“L”,
“llll”})
);
雕文安放('O',字母\u t({
“哦”,
"啊!,
"啊!,
"啊!,
"啊!,
"啊!,
“OOO”})
);
雕文.安放(0,字母\u t({
"? ??",
"??? ?",
"??? ?",
"?? ??",
"?? ??",
"?????",
"?? ??" })
);
ran=真;
}//如果结束,则结束
返回标志符号;
}
int main(int argc,const char*argv[]
{
常量字符*常量消息=(argc>1)?argv[1]:“你好”;
const glyph_table&glyphs=create_glyphs();
for(无符号i=0;i秒:glyphs.find(0)->秒;
/*对于STL哈希表来说,从find()返回的迭代器中获取由键索引的值的引用的语法有点巴洛克风格。
*/
//打印其第i行:
我不记得你需要逐行打印,所以你需要打印整个第一行,然后是整个第二行,等等。尝试将for循环组合成一个循环。为了一个更有趣的挑战,创建一个函数,该函数接受任意字符串,并以大字母打印。@BenjaminLindley我认为这是实际的练习-可能不是t、 这是一个很好的咖啡休息拼图-或代码golf@pm100:没关系,误解了。有趣的是,如果每个字符都来自一个现有的字体表,那么就检查字形,而不是只检查一个大的预计算字母表。你可以使用不同的字体。几乎感觉像作弊。非常简单的解决方案,我喜欢你如何直观地使用e代码中的巨人HELLO:)但是SundU没有指定C++的版本,所以这不能只在C++ 11中工作吗?如果你必须沿着这个路线走下去,你也可以用<代码> CUT/<代码>替换每个<代码> PuxSuff< <代码>。不需要向量串,只是代码> CUT< /CODE >,硬编码。但是我不遵循这个方法,因为它不是FRIB。完全可以。如果你想写“HOLE”而不是“HELLO”,你必须花一些时间来修改代码,尽管字母是一样的。我会选择dúthomhas的解决方案。太好了,这就是我的意思。当然,这需要更多的时间来写,但这是一个更灵活的解决方案,而且不会让人觉得作弊。+1。
#include <array>
#include <cstdlib>
#include <iostream>
#include <string>
#include <unordered_map>
using std::cout;
using ctype = char;
static constexpr unsigned rows = 7;
using letter_t = std::array< std::string, rows >;
using glyph_table = std::unordered_map< ctype, letter_t >;
const glyph_table& create_glyphs()
{
// Returns a reference to a singleton.
static glyph_table glyphs;
static bool ran = false;
if (!ran) { // Skip this step if called again.
glyphs.emplace( 'H', letter_t({
"H H",
"H H",
"H H",
"HHHHH",
"H H",
"H H",
"H H" })
);
glyphs.emplace( 'E', letter_t({
"EEEEE",
"E ",
"E ",
"EEEEE",
"E ",
"E ",
"EEEEE" })
);
glyphs.emplace( 'L', letter_t({
"L ",
"L ",
"L ",
"L ",
"L ",
"L ",
"LLLLL" })
);
glyphs.emplace( 'O', letter_t({
" OOO ",
"O O",
"O O",
"O O",
"O O",
"O O",
" OOO "})
);
glyphs.emplace( 0, letter_t({
"? ??",
"??? ?",
"??? ?",
"?? ??",
"?? ??",
"?????",
"?? ??" })
);
ran = true;
} // end if
return glyphs;
}
int main( int argc, const char *argv[] )
{
const char* const message = (argc > 1) ? argv[1] : "HELLO";
const glyph_table& glyphs = create_glyphs();
for ( unsigned i = 0; i < rows; ++i ) {
for ( unsigned j = 0; j < 22 && message[j]; ++j ) {
// Look up the glyph for the jth character of message, or if that isn't in the table, the glyph stored under the null character.
const letter_t& g = glyphs.count(message[j]) ? glyphs.find(message[j])->second : glyphs.find(0)->second;
/* The syntax to get a reference to the value indexed by a key from an iterator returned by find() is a little baroque for a STL hash table.
*/
// Print its ith row:
cout << ' ' << g[i];
}
cout << '\n';
}
return EXIT_SUCCESS;
}