C++ “打印”;“你好”;用大写字母?

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

如果每个字母高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    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;
}