首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >C++ Google开始练习4

C++ Google开始练习4
EN

Stack Overflow用户
提问于 2014-02-13 17:46:07
回答 3查看 133关注 0票数 1

https://developers.google.com/edu/c++/getting-started#exercises-and-projects

我指的是练习4旗

我有点不明白这是怎么回事。我为每个字母"F“"R”和"E“创建了不同的函数。

"F",例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
void printF(){
cout<<"FFFFF"<<endl;
cout<<"F"<<endl;
cout<<"FFF"<<endl;
cout<<"F"<<endl;
cout<<"F"<<endl;
}

据我所知,这是行不通的,因为没有办法打印像这样的东西,然后在旁边打印另一个。有人能从概念上解释或举例说明我如何打印“免费”这个词吗?谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-02-13 17:58:27

您可以将字母创建为std::string数组。为了保持一致性,它有五个字符串,五个字符长。您可以使用像get_font_letter这样的函数来选择当前字母。有更好的方法来做到这一点,但如果你只关心这个词,它应该是暂时的。我建议您做一些类似于“字体数据库”的操作,您可以在文本文件中绘制和索引字母。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <iostream>
#include <vector>

std::string f[] = {
    "FFFFF",
    "F    ",
    "FFF  ",
    "F    ",
    "F    ",
};

std::string r[] = {
    "RRRRR",
    "R   R",
    "RRRR ",
    "RRR  ",
    "R  RR",
};

std::string e[] = {
    "EEEEE",
    "E    ",
    "EEE  ",
    "E    ",
    "EEEEE",
};

std::string* get_font_letter(const char& c)
{
    if (c == 'F') return f;
    if (c == 'R') return r;
    if (c == 'E') return e;
}

你不需要二维std::vector。你可以用一个空格把每一行拼凑在一起。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int main()
{
    std::string word = "FREE";
    std::vector<std::string> v;
    v.resize(5);
    for (unsigned int i = 0; i < 5; i++)
    {
        std::string row = "";
        for (auto it = word.begin(); it != word.end(); ++it)
        {
            auto letter = get_font_letter(*it);
            row += letter[i] + " ";
        }
        v.push_back(row);
    }
    for (auto it = v.begin(); it != v.end(); ++it)
        std::cout << *it << "\n";
}

输出:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
FFFFF RRRRR EEEEE EEEEE 
F     R   R E     E     
FFF   RRRR  EEE   EEE   
F     RRR   E     E     
F     R  RR EEEEE EEEEE
票数 2
EN

Stack Overflow用户

发布于 2014-02-13 17:52:06

如果没有给你一个完整的解决方案,因为你显然是来学习的,这将是我的策略:

使用字符串(或2-D数组)的向量来表示字母.然后构建一个表示该字符串的向量列表,并逐个字符串打印所有向量字符串(打印所有向量的第一个字符串,然后打印第二个向量,等等)。单个字符串应该具有恒定的长度,并提供一定的间距。

票数 1
EN

Stack Overflow用户

发布于 2016-06-18 14:31:50

这就是我在这个例子中所做的。

  1. 首先,我想创建一个像printA()、printB()这样的函数。但我意识到了同样的问题。另外,这意味着我们需要为每个字母和符号创建超过26个这样的函数。所以,没有使用这种方法。
  2. 我认为这封信应该是5x5码。我们需要点矩阵打印机的功能。它打印字符串中每个字母的第一行点,然后打印下一行的第二行点,以此类推。我们正在打印的字母需要相同的符号,而不是点。例如,如果我们打印H,点将是'H‘。
  3. 那么,如何以最少的代码行和较少的复杂度来实现这一点呢?我决定为行创建位标志。考虑到一排有5个点,可能会有32个组合。比如- 10000,11000,11100等等。在实现这个过程中,我意识到我们不需要那么多的字母来定义字母。就像这样- const unsigned char EOne = 0x1F; // 000 11111 const unsigned char BOne = 0x1E; // 000 11110

我给bitFlags取了直观的名字,知道它们在信中的归属。下面是关于位标志- http://www.learncpp.com/cpp-tutorial/3-8a-bit-flags-and-bit-masks/的很好的信息

  1. 下一步是为字母表中的每个字母创建设计。就像- const unsigned char A[5] = {AOne, ATwo, EOne, AFiv, AFiv}; const unsigned char B[5] = {BOne, AFiv, BOne, AFiv, BOne}; const unsigned char J[5] = {~EThr, ~BOne, ~BOne, AFiv, ~AFiv};

这就形成了字母A,B,C的设计。Z.

  1. 在下一步中,可以在字母和它们的设计之间创建一个地图。
  2. 当用户输入字符串打印时,在5次迭代的for循环中,您可以在其设计中取-0字母:第0位标志,在其设计中取第1位标志。第n字母:设计中的第一个位标志。然后,第0字母:第1位标志,第1位字母:第1位标志,第9字母:第1位标志。直到你把所有5行都打印出来。
  3. 这位标志有什么用?我使用了std::bitset并测试了每一个位,以便打印或留出空白。lineBits是特定字母的设计行的位标志。 std::bitset<8>位(LineBits); //由于我们只有5x5个字母,所以(int bitpos = 4;bitpos >= 0;bitpos-){ if(bits.test(bitpos)) { cout <<信函;outFile <<字母;//文件中,从最左位(第4位)开始。}{ cout << ";outFile << ";// In file。}}

这样,只要减少代码行,我就可以打印任何字符串。因为,我用了地图,所以很容易打印出被打印出来的字母的符号。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
FFFFF  RRRR   EEEEE  EEEEE  ZZZZZ  Y   Y  
F      R   R  E      E          Z   Y Y   
FFF    RRRR   EEE    EEE      Z      Y    
F      R R    E      E      Z        Y    
F      R  RR  EEEEE  EEEEE  ZZZZZ    Y   

不过,设计所有的字母需要一段时间。让我知道如何改进这段代码。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21769331

复制
相关文章
sqlzoo练习4
select subject, count(subject) – 统计每个学科的数量 from nobel where yr=‘1960’ group by subject;
皮大大
2021/03/02
4110
python练习4
题目:输入某年某月某日,判断这一天是这一年的第几天? 1.程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊       情况,闰年且输入月份大于3时需考虑多加一天。 2.程序源代码:
用户8442333
2021/05/24
2630
C++编程基础练习
注:本文练习题均出自《Essential C++》第一章 练习1,1 从一个简单程序开始 #include<iostream> #include<string> using namespace std; int main() { string user_name; cout << "Please enter your first name :"; cin >> user_name; cout << '\n' << "Hello," <<
Zoctopus
2018/06/04
1.1K0
Google 账号开始支持 OpenID 协议
根据 Google Code blog 日志 Google moves towards single sign-on with OpenID,Gmail 已经支持 OpenID 协议。现在网站可以通过使用 OpenID 协议允许用户通过 Google 账号登陆他们的网站。现在运用该功能的公司就是在线办公服务提供商 Zoho (http://www.zoho.com) 。Google 使用是 OpenID 2.0 协议,该协议能够让网站验证 Google 账号,包括获取用户的邮箱地址。
Denis
2023/04/14
5080
Google 账号开始支持 OpenID 协议
素数相关问题练习 C++
辗转相除 #include <iostream> using namespace std; int gcb(int a,int b) { if(b==0) return a; return gcb(b,a%b); } int main() { int a,b; cin>>a>>b; cout<<gcb(a,b); } 素数判定 #include <stdio.h> #include <math.h> #include <vector> using namespac
kalifa_lau
2018/04/26
6750
分享Google C++风格指南
  Qt君为大家收集的Google C++风格指南PDF版本(可能并不是最新版本) 。
Qt君
2020/05/08
4950
分享Google C++风格指南
C++创建学生类练习
/*作业,定义一个学生类*/ /*数据成员:学号、姓名、数学、英语、计算机三科成绩 *成员函数:求总成绩、求三科平均成绩、输出学生信息 *新增一个生日类 2018.4.2 */ #include <iostream> #include <string> using namespace std; class Data { public: Data(); Data(int ye, int mon, int da); Data(Data &da); void inf(); p
Enterprise_
2018/05/18
7260
C++进阶高级练习试题
简单来说, 指的是生成 序列中的第 个位置; 指的是使用 中的第 个元素
AI拉呱
2021/01/14
1.3K0
C++创建People类--练习
题目描述 /*设计一个用于人事管理的People(人员)类。*/ /* 考虑到通用性,这里只抽象所有类型人员都具有的属性: number(编号)、sex(性别)、birthday(出生日期)、id(身份证号)等等。 其中“出生日期”定义为一个“日期”类内嵌子对象。 用成员函数实现对人员信息的录入和显示。 要求包括:构造函数和析构函数、拷贝构造函数、内联成员函数、聚集。 */ 代码如下 #include<iostream> #include<string> using namespace std; class
Enterprise_
2018/05/18
1.3K0
Google C++编码规范学习
image.png image.png image.png image.png image.png image.png image.png image.png image.png image.png image.png image.png image.png image.png image.png image.png image.png image.png image.png
Kiddy
2018/07/17
9560
Google C++编码规范学习
100个Numpy练习【4】
翻译:YingJoy 网址: https://www.yingjoy.cn/ 来源: https://github.com/rougier/numpy-100 全文: https://github.com/yingzk/100_numpy_exercises ---- 接上文: 100个Numpy练习【1】 接上文: 100个Numpy练习【2】 接上文: 100个Numpy练习【3】 ---- Numpy是Python做数据分析必须掌握的基础库之一,非常适合刚学习完Numpy基础的同学,完成以下习题
YingJoy_
2018/03/21
9860
100个Numpy练习【4】
100个Numpy练习【4】
Numpy是Python做数据分析必须掌握的基础库之一,非常适合刚学习完Numpy基础的同学,完成以下习题可以帮助你更好的掌握这个基础库。
YingJoy_
2018/03/01
1.6K0
100个Numpy练习【4】
练习4—寻求特定值
题目 编写程序,从键盘上输入N个学生的考试成绩存入一维数组中,求该数组中成绩的最高分、最低分及平均分并输出到屏幕。 解题步骤 (1)定义常量N值; (2)建立用于存放数据的一维数组; (3)接收用户输入; (4)查询 / 计算特定值; (5)输出结果; Java import java.util.Scanner; public class Demo { public static void main(String[] args) { Scanner input = ne
攻城狮杰森
2022/06/03
3650
Google C++ 编程风格指南(四):来自 Google 的奇技
Google 用了很多自己实现的技巧 / 工具使 C++ 代码更加健壮, 我们使用 C++ 的方式可能和你在其它地方见到的有所不同.
CPP开发前沿
2022/03/03
7240
Google Pixel 4 Soli Radar
啥是个雷达?雷达一般来说是个超级大的物件,Google在不屑的投资(烧钱)下,终于做了一个超级小巧的芯片。完成了手机的隔空操作!阿巴阿巴
云深无际
2022/02/09
9080
Google Pixel 4 Soli Radar
Google开始自主研发处理器
从Google的发展历程来看,它一直都不是一家硬件厂商,即使是自己推出的硬件产品也都是靠OEM厂商来代工。很典型的例子就是Chromebook和Nexus系列。但是这种状况在 Chromebook Pixel和Pixel C tablet这两款产品出现之后发生了改变。因为这两款产品除了其中的处理器是其他厂商研制的外,其他的部件都是由Google自主研发设计并加工的。 而近期Google发布了一则新的招聘启事,职务是“多媒体芯片架构师”。这或许意味着 Google正在计划像苹果一样为自己以后的设备配备自己生产
逸鹏
2018/04/09
5460
Google开始自主研发处理器
继承练习之汽车类—C++
文件中有:汽车类(汽车的总体信息)、引擎类(汽车排量等相关信息)、小车类(车载人数、排量信息等)、卡车类(车载人数、排量信息、载重量、车轮数、车重等),里面包含了公有及私有继承的实现。 /* 功能:汽车类 日期:2013-11-25 */ #include <iostream> using namespace std; /**********************************************************/ //汽车类 class Vehicle { public: Veh
WindCoder
2018/09/20
8590
C++ OpenCV透视变换综合练习
以前的文章《C++ OpenCV之透视变换》介绍过透视变换,当时主要是自己固定的变换坐标点,所以在想可不可以做一个通过轮廓检测后自适应的透视变换,实现的思路通过检测主体的轮廓,使用外接矩形和多边形拟合的四个最边的点进行透视变换。
Vaccae
2021/01/18
1.1K0
数字颠倒(C++ reverse的练习)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
喜欢ctrl的cxk
2019/11/08
1.6K0
点击加载更多

相似问题

加速C++练习4-0

110

SICP开始练习时出错(练习1.3)

32

从“编程:使用C++的原则和实践”的第4章开始练习。Bjarne Stroustrup

70

google python练习

62

4闭合练习2

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文