C++学习/温习:新型源码学编程(三)

news2024/11/27 14:31:22

写在前面(祝各位新春大吉!兔年如意!)

  • 【本文持续更新中】
  • 面向初学者撰写专栏,个人原创的学习C/C++笔记(干货
  • 所作源代码输出内容为中文,便于理解
  • 如有错误之处请各位读者指正
  • 请读者评论回复、参与投票,反馈给作者,我会获得持续更新笔记干货的动力。

致粉丝:可以在阅读完我的文章后,自己尝试写一点原创心得(哪怕一行字也好)。
               希望众(尽管617个🤣)粉丝多多支持、浏览、自我创作@_@


知识点概览

写在前面(祝各位新春大吉!兔年如意!)

知识点概览 

C++ Primer Plus编程练习4.13笔记

一.姓名成绩年龄打印

1.预处理指令#define

2.char类型

3.getline(); C++库函数(重点)

二.string类

 1.头文件 string 

2.string声明变量

3.getline()函数在string类操作

三.使用strcpy和strcat复制字符串

1.Visual Stdio2022 编译器解除警报错误

2.strcpy 复制字符串的函数

3.strcat 附加字符串的函数

 四.C++结构(OOP的基石)
 

结语

C++ Primer Plus编程练习4.13笔记

一.姓名成绩年龄打印

编写一个C++程序,输出姓名、成绩与年龄。注意,英文输入姓名包含多个单词(中间有空格)。
另外,上调成绩字母,若输入A则上调为B。

//4.13_1.cpp
//整行输入函数cin.getline();
#include<iostream>
#define NameMax 100
using namespace std;
int main()
{
	char firstName[NameMax];//英文习惯,名前姓后
	char lastName[NameMax];//lastname为姓,firstname为名
	char grade;
	int age;
	cout << "请输入你的名:\n";
	cin.getline(firstName,NameMax);//库函数,接受字符串对象名与字符串长度信息做参数
	cout << "请输入你的姓:\n";
	cin.getline(lastName, NameMax);//整行输入,检测到Enter自动截断输入
	cout << "请输入你的成绩(字母等级):\n";
	cin >> grade;
	grade += 1;
    cout << "请输入你的年龄:\n";
	cin >> age;
	cout << "姓名:"<<lastName<<","<< firstName <<endl;
	cout << "成绩:" << grade<<endl;//等级+1,ASCII码+1
	cout << "年龄:" << age << endl;
	return 0;
}

1.预处理指令#define

#define NameMax 100
定义全局常量NameMax为100
就像 #include<iostream> 一样,在C++预处理器中,编译器提前了解到要使用头文件 iostream ,这条预处理指令的宏 NameMax 定义为 100 ,全局可用,自动将出现 NameMax的地方置换为值100。

2.char类型

char firstName[NameMax];
char lastName[NameMax];
char grade; 
char类型可以声明字符或字符串(数组)。
char 变量名 ;声明一个字符,可以容纳数字、字母等。
单一字符可以执行算术运算,本例中读取输入的字母,并给其ASCII码+1,再有cout来将类型自动还原,从ASCII码值转换为字符。
char 变量名[字符串长度]; 声明一个字符串,可以容纳多个数字、字母,句子、词组等信息。
此程序将字符串长度设置为名叫NameMax值为100的常量。

!注意:字符串(数组)实际存储比数值长度短1的

3.getline(); C++库函数(重点)

面向行的输入getline()函数,通常有两个参数(后续介绍第三个参数),在头文件istream中,是C++中cin输入的类成员函数,可以不受空格影响,而是在读取到 Enter 键或达到输入上限时截断输入。
示例:
cin.getline(firstName,NameMax); cin通过句点“.”操作符访问它的成员函数getline(); ,示例中让getline函数读取长度为NameMax-1的名叫firstName的数组(字符串),并将读取值返回给该数组。
注:因为函数读取最后会加上空字符标志字符串(数组)结束,同时不会储存换行符,而get();函数会读取并储存换行符。
常用格式:
cin.getline(数组名,数组长度)

源代码运行示例:

二.string类

用string类改写程序清单4.4
(此处不展示原程序清单4.4,原程序使用cin.getline()函数,定义2个长为20的字符串存储姓名与甜点,再打印出来。)

//4.13_2.cpp
//C++中的string类,打印姓名、甜点
#include<iostream>
#include<string>//包含string类的头文件
using namespace std;
int main()
{
	string name, dessert;//声明2个string类变量
	cout << "Enter your name:\n";
	getline(cin,name);	
	//获取整行输入,参数1的cin说明从哪里获取输入
	//参数2的name是string类变量,自动调整变量长度
	//注:char[];声明数组(字符串)类型,string声明普通变量。
	cout << "Enter your favourite dessert:\n";
	getline(cin, dessert);
	cout << "I have some delicious " << dessert
		 << " for you," << name<<".\n";
	return 0;
}

 1.头文件 string 

旧版C++实现中使用C++库中头文件<string.h>,新标准中直接使用<string>头文件

2.string声明变量

string类与char类型不同, char[]; 声明数组(字符串)类型, string 声明普通变量
像其他声明一样,只需要在 string 后加上变量名即可。

3.getline()函数在string类操作

常用格式:
getline(cin,string类变量名)

这里的getline函数不是cin的类成员函数。因为最初设计getline时没有string类,所以在cin中也没有直接的对于string类的输入操作。后加入了上述格式的整行输入操作,然而这里的getline()函数不附属于cin类之下,存在于头文件中。
上面的getline函数 getline(cin,string类变量名)  中,cin为getline函数指明获取输入的位置,而长度是由string类的变量自己调整的,所以省去具体长度数值。
输出时string类变量按照欧通变量处理。

源代码运行示例:

三.使用strcpy和strcat复制字符串

编写一个程序,要求用户先输入其名,再输入其姓;然后程序使用一个逗号和空格将姓和名组合起来,并存储和显示组合结果。请使用char数组和头文件cstring中的函数。

//4.13_3.cpp
//使用strcpy和strcat复制字符串
#pragma warning(disable : 4996)//解除编译器strcpy和strcat警告
#include<iostream>
#include<string>
#include<cstring>
using namespace std;
int main()
{
	char firstName[40];//英文习惯,名前姓后
	char lastName[40];//lastname为姓,firstname为名
	char total[84];
	cout << "请输入你的名:\n";
	cin >> firstName;
	cout << "请输入你的姓:\n";
	cin >> lastName;
	strcpy(total, lastName);
	strcat(total, ", ");
	strcat(total, firstName);
	cout << "姓名:" <<total << endl;
	return 0;
}

1.Visual Stdio2022 编译器解除警报错误

#pragma warning(disable : 4996) 

解除编译器警告。在出现一些对于编译器给出的完全不会出问题的错误警告时,可以使用上述代码,可以将上面的 4996 用实际警告标号来代替

2.strcpy 复制字符串的函数

strcpy可以将char数组(或普通字符串)从参数二复制到参数一
示例:

strcpy(total, lastName); 

本例中将存储在 char数组 lastName 中的内容复制到 char 数组 total 中。
若编译器提示可能出现未知错误(参数一字符串的长度太小时可能“装不下”参数二字符串里的信息),可以用strcpy_s代替或者使用strncpy的第三个参数指出要复制的字符串长度

3.strcat 附加字符串的函数

strcat可以将char数组(或普通字符串)从参数二附加(再次将内容复制添加到已经有内容的char数组中)到参数一
示例:

strcat(total, ", ");
strcat(total, firstName);

在本例中①将普通字符串", "(注:半角双引号中包括半角逗号与空格)附加到 char 数组 total 中。

              ②将存储在 char数组 firstName 中的内容附加到 char 数组 total 中。
若编译器提示可能出现未知错误(参数一字符串的长度太小时可能“附加不完”参数二字符串里的信息,出现字符覆盖),可以用strcat_s代替或者使用strncat的第三个参数指出要附加的字符串长度

注:strcpy函数和strcat函数都在头文件 csrting 中。
       string类变量执行复制附加时可以直接像普通变量一样。

举例:
#include<string>//包含string类变量声明

//#include<cstring>//包含strcpy、strcat等操作函数,此程序中可以不用

string str1,str2.str3,str4;
str1="abcd";
str2="efg";
str3=str1;//将str1直接赋(复制)给str3
str4=str1+str2;//将str1和str2拼在一起,再赋给str4
str3+=str2;//将str2附加给str3(注意:此时str3中已有信息)
//上行较为复杂的代码,等同于 str3=str3+str2;  

源代码运行示例:

 四.C++结构(OOP的基石)

结构CandyBar包含3个成员。第一个成员存储了糖块的品牌,第二个成员存储糖块的质量(可以有小数),第三个成员存储了糖块的卡路里含量(整数)。请编写一个程序,声明这个结构,创建1个名为snack的 CandyBar 变量,并将其成员分别初始化为“Mocha Munch”、2.3和350。初始化应在声明snack时进行。最后,程序显示snack 变量的内容。

#include<iostream>
using namespace std;
struct CandyBar//结构类型的变量CandyBar,描述包含的数据类型
{
    char name[20];//char数组(字符串),品牌
    double weight;//double数,重量
    int calorie;//int整型,卡路里
};
int main()
{
    //设置结构类型CandyBar名下的变量,给结构类型CandyBar名下的变量赋值,这时可以省略struct
    CandyBar snack =
    {
        "Mocha Munch",//结构中描述的name类char数组
        2.3,          //结构中描述的weight类double浮点数
        350           //结构中描述的calorie类int整数
    };//snack是一个CandyBar类的struct结构

    CandyBar snack2 = { "Baby Bear", 1.2, 280};//此处仅作展示,实际程序中不需要
    //snack2是一个CandyBar类的struct结构

    cout << "糖果品牌:" << snack.name<<endl;
    //访问结构类型CandyBar名下,变量snack中的name类的值。未使用指针转型。
    cout << "糖果重量(kg):" << snack.weight << endl;
    cout << "糖果卡路里含量:" << snack.calorie << endl;

    return 0;
}

在此连接文章:C++结构(OOP的基石)

源代码运行示例:


结语

今天我们共同学习了 C++  等重要知识。
学习编程是一条漫长的路,贵在坚持。每天学习来提升自己的的编程能力,成为耀眼的IT之星。
各位读者跟随我的脚步,我们共同努力,共同进步吧!

返回作者主页

专栏文档:C++学习/温习:新型源码学编程(一)(优质好文)

                  C++学习/温习笔记:源码学编程(二)

专栏下一篇文档:【待更新】

其它文章:

                  C语言求幂运算(尽大支持)——中文式奇特命名

                  简洁易懂地介绍C++参数

                  学习C++基本数值类型 

                  C/C++基础运算符


 如有探讨问题联系邮箱:yhlz0613@163.com

对于文章中的错误请各位批评指正,我一定及时更正

请在投票后评论回复意见,如有关于写博文的指导也请您回复提出

 <!--感谢浏览                    诸君慢行且留言          过客匆匆常回访-->

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/180587.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

01 课程简介、HTML标签【尚硅谷JavaWeb教程】

1. 课程体系设计 2. HTML标签 服务器—浏览器&#xff08;字符串"" &#xff09; demo01.html 1&#xff09;html语言是解释型语言&#xff0c;不是编译型 浏览器是容错的 2&#xff09;html页面中由一对标签组成&#xff1a; < html>称为 开始标签 < /htm…

Java基础语法——数组概念、数组内存图解(一个数组、二个数组)及二元数组的应用

目录 数组概述 数组定义格式 数组概念 数组的定义格式 数组的初始化 数组初始化概述 数组的初始化方式 Java中的内存分配 Java中一个数组的内存图解 Java中二个数组的内存图解 两个数组指向同一个地址的内存图解 数组操作中两个常见的小问题 二维数组 二维数组概述…

c++11 标准模板(STL)(std::forward_list)(十一)

定义于头文件 <forward_list> template< class T, class Allocator std::allocator<T> > class forward_list;(1)(C11 起)namespace pmr { template <class T> using forward_list std::forward_list<T, std::pmr::polymorphic_…

前端架构处理Cookie、Session、Token

1. Cookie Cookie 总是保存在客户端中。按在客户端中的存储位置&#xff0c;可分为内存 Cookie 和硬盘 Cookie。 内存 Cookie 由浏览器维护&#xff0c;保存在内存中&#xff0c;浏览器关闭后就消失了&#xff0c;其存在时间是短暂的。硬盘 Cookie 保存在硬盘里&#xff0c;…

Spring Boot、Spring MVC热部署

一、相关概述 JVM能够识别的是字节码.class文件每次重新运行都是一个重新编译的过程&#xff0c;也就是说会生成新的target字节码文件&#xff1b;但是每次修改了代码之后也必须要重新运行&#xff0c;这样比较麻烦。热部署就能较好地解决该问题&#xff0c;直接刷新页面就可以…

(22)go-micro微服务kibana使用

文章目录一 kibana介绍二 Kibana主要功能三 Kibana侧边栏四 Kibana安装1.拉取镜像2.运行命令3.查看是否运行五 Kibana使用六 Kibana图形化界面七 最后一 kibana介绍 Kibana &#xff1a;是一个开源的分析和可视化平台&#xff0c;旨在与 Elasticsearch 合作。Kibana 提供搜索、…

初识Nonebot2

文章目录什么是nonebot2&#xff1f;机器人工作流程WebSocket协议OneBot标准Nonebot2框架工作路径什么是nonebot2&#xff1f; 关于NoneBot2&#xff0c;我们先来引用一下官方文档的描述 NoneBot2是一个可扩展的 Python 异步机器人框架&#xff0c;它会对机器人收到的事件进行…

创建进度条 tqdm模块

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 创建进度条 tqdm模块 选择题 以下python代码最后输出错误的一项是? from tqdm import tqdm import time text{loss:0.2,learn:0.8} print(【开始执行】) for i in tqdm(range(50)…

python图像处理(图像缩放)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 图像缩放也是isp处理的一个基本功能。现在的camera像素越来越大,但是显示设备的分辨率是一定的,如果想把图像显示在显示器或者lcd上面,那就要符合对应显示设备的分辨率。一般来说…

【数据结构与算法理论知识点】5、图与贪心算法

5、图与贪心算法 逻辑结构 5.1、图的定义和术语 图&#xff1a;Graph(V,E) V:顶点&#xff08;数据元素&#xff09;的有穷非空集合&#xff1b; E:边的有穷集合。 **无向图:**每条边都是无方向的 有向图:每条边都是有方向的 完全图:任意两个点都有一条边相连 稀疏图:有很…

SSM 农产品销售管理系统

SSM 农产品销售管理系统 SSM 农产品销售管理系统 功能介绍 首页 用户登录注册 图片轮播 最新上架 农产资讯 产品商城 产品详情 在线留言 加入购物车 提交购买 评论 收藏 系统简介 系统公告 关于我们 友情链接 后台管理 登录 系统用户管理 修改密码 用户权限管理 产品信息管理…

Hadoop基础之《(4)—Yarn概述》

一、什么是Yarn YARN&#xff08;Yet Another Resource Negotiator&#xff09;&#xff0c;简称YARN&#xff0c;另一种资源协调者&#xff0c;是Hadoop的资源管理器。 二、Yarn的组成 Yarn有两个核心组件&#xff0c;ResourceManager和NodeManager。 1、ResourceManager&am…

UE Operation File [ Read / Write ] DTOperateFile 插件说明

蓝图直接操作文件的功能节点 可以获取文件基本信息以及读写文件 目录 1. File Exists 2. File Size 3. File Delete 4. File Is Read Only 5. File Move 6. File Save By String 7. File Save By Array String 8. File Save By Array Binary 9. File Append By Strin…

Jenkins(一):什么是Jenkins?

目录 一、Jenkins是什么&#xff1f; 二、安装步骤 1.访问官网&#xff0c;下载安装包 2.解锁Jenkins 3.设置Jenkins的工作目录&#xff08;可选&#xff09; 总结 前言 近期在研究自动化部署&#xff0c;在这里对Jenkins做个笔记。 一、Jenkins是什么&#xff1f; Jenk…

数据挖掘,计算机网络、操作系统刷题笔记36

数据挖掘&#xff0c;计算机网络、操作系统刷题笔记36 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;可能很多算法学生都得去找开发&#xff0c;测开 测开的话&#xff0c;你就得学数据库&#xff0c;sql&#xff0c;orac…

泊松过程与排队论

全国同理:随机过程随机会过 ......唉 你说热统,他为什么要搭配着随机过程一起学 ......唉 你说数模比赛 为什么不能白送一个奖牌小摘要泊松过程泊松过程来到间隔与等待时间的分布来到时刻的条件分布M/G/1 忙期非齐次泊松过程复合泊松过程条件泊松过程排队系统输入常见的输入分布…

Python eval()和exec()函数详解

eval() 和 exec() 函数都属于 Python 的内置函数&#xff0c;由于这两个函数在功能和用法方面都有相似之处&#xff0c;所以将它们放到一节进行介绍。eval() 和 exec() 函数的功能是相似的&#xff0c;都可以执行一个字符串形式的 Python 代码&#xff08;代码以字符串的形式提…

Elasticsearch:深入理解 Elasticsearch 查询:过滤器查询 vs 全文搜索

如果我必须用一句话来描述 Elasticsearch&#xff0c;我会这样说&#xff1a; 当搜索遇到大规模分析时&#xff08;近乎实时&#xff09; Elasticsearch 是目前最受欢迎的 10 大开源技术之一。 公平地说&#xff0c;它包含许多本身并不独特的关键功能&#xff0c;但是&#xff…

ARP渗透与攻防(八)之ARP攻击防御

系列文章 ARP渗透与攻防(一)之ARP原理 ARP渗透与攻防(二)之断网攻击 ARP渗透与攻防(三)之流量分析 ARP渗透与攻防(四)之WireShark截获用户数据 ARP渗透与攻防(五)之Ettercap劫持用户流量 ARP渗透与攻防(六)之限制网速攻击 ARP渗透与攻防(七)之Ettercap Dns劫持 ARP攻击防御 …

【Linux】调试器-gdb使用

一、背景 程序的发布方式有两种&#xff0c;debug模式和release模式Linux gcc/g出来的二进制程序&#xff0c;默认是release模式要使用gdb调试&#xff0c;必须在源代码生成二进制程序的时候, 加上 -g 选项 当我们不加 -g 选项的时候&#xff0c;我们生成的可执行文件的相关符…