写在前面(祝各位新春大吉!兔年如意!)
- 【本文持续更新中】
- 面向初学者撰写专栏,个人原创的学习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
对于文章中的错误请各位批评指正,我一定及时更正
请在投票后评论回复意见,如有关于写博文的指导也请您回复提出
<!--感谢浏览 诸君慢行且留言 过客匆匆常回访-->