C++——字符串、读写文件、结构体、枚举
个人简介
👀个人主页: 前端杂货铺
🙋♂️学习方向: 主攻前端方向,正逐渐往全干发展
📃个人状态: 研发工程师,现效力于中国工业软件事业
🚀人生格言: 积跬步至千里,积小流成江海
🥇推荐学习:🍍前端面试宝典 🍉Vue2 🍋Vue3 🍓Vue2/3项目实战 🥝Node.js🍒Three.js🍖数据结构与算法体系教程🌕个人推广:每篇文章最下方都有加入方式,旨在交流学习&资源分享,快加入进来吧
C++基础篇
内容 | 参考链接 |
---|---|
C++入门(一) | C++——简介、Hello World、变量常量、数据类型 |
C++入门(二) | C++——数组、多维数组、简单排序、模板类vector |
文章目录
- C++基础篇
- 前言
- 一、字符串
- 二、读写文件
- 1、文件读取
- 2、文件写入
- 三、结构体
- 四、 枚举
- 总结
前言
大家好,这里是前端杂货铺。
上一篇文章,我们初步认识了 C++,并学习了数组和模板类。
接下来,继续我们 C++ 的学习!
一、字符串
下面,进行一些对于字符串的相关操作,内容很简单,直接看代码和结果吧!
#include<iostream>
#include<string>
using namespace std;
int main() {
// 默认初始化
string s1;
// 拷贝初始化
string s2 = s1;
// 直接初始化
string s3 = "Hello world!";
string s4("hello world!");
string s5(5, 'h');
cout << s5 << endl; // hhhhh
// 访问字符
cout << "s4[1]=" << s4[1] << endl; // s4[1]=e
// 修改 s4 的第一个字符为 H
s4[0] = 'H';
cout << "s4=" << s4 << endl; // Hello world!
// 修改 s4 的最后一个字符为 ?
s4[s4.size() - 1] = '\?';
cout << "s4=" << s4 << endl; // Hello world?
for (int i = 0; i < s4.size(); i++) {
s4[i] = toupper(s4[i]);
}
cout << "转为大写的s4:" << s4 << endl; // HELLO WORLD?
// 字符串拼接
string str1 = "hello";
string str2("world");
string str3 = str1 + ' ' + str2 + '!'; // hello world!
cout << str3 << endl;
// string str5 = "hello" + "world"; // 错误
cin.get();
}
为什么
string str5 = "hello" + "world";
为错误代码呢??
因为 "hello"
等价于 char str[6] = { 'h', 'e', 'l', 'l', 'o', '\0' };
,char类型的数组是没有这样的拼接操作的,所以两个字符串字面值不能相加。
二、读写文件
C++ 中读文件使用 ifstream
,写文件用 ofstream
。
1、文件读取
我们首先在资源文件夹下创建一个 input.txt
文件,随意输入一些内容…
接下来,我们分别使用 按照单词逐个读取、逐行读取、逐个字符读取 的方式读取我们刚刚创建的 input.txt
文件
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
int main()
{
// 文件读取
ifstream input("input.txt");
// 按照单词逐个读取
string word;
while (input >> word)
{
cout << word << endl;
}
// 逐行读取
string line;
while (getline(input, line))
{
cout << line << endl;
}
// 逐个字符读取
char ch;
while (input.get(ch)) {
cout << ch << endl;
}
cin.get();
}
以上三种方式打印的内容分别如下图(第三种方式太长了,没有完全截图,能理解逐个字符就行):
2、文件写入
我们先读取刚刚的 input.txt
文件,然后写入到 output.txt
文件
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
int main()
{
// 文件读取
ifstream input("input.txt");
// 文件写入
ofstream output("output.txt");
// 逐行读取
string line;
while (getline(input, line))
{
output << line << endl;
}
cin.get();
}
我们找到与 input.txt
同文件夹的 output.txt
文件,即可看到如下内容:
三、结构体
结构体是用户自定义的复合数据结构,里面可以包含多种不同类型的数据对象。
下面的代码进行了 定义结构体、创建数据对象并做初始化、定义和遍历结构体数组 等操作,代码很简单,类似于类的定义和创建,一睹为快!
#include<iostream>
#include<string>
using namespace std;
// 定义一个结构体
struct StudentInfo
{
string name;
int age;
double score;
}stu2, stu3 = {"前端杂货铺", 22, 90};
// 输出数据对象的完整信息
void printInfo(StudentInfo stu)
{
cout << "学生姓名:" << stu.name << "\t 年龄:" << stu.age << "\t 成绩:" << stu.score << endl;
}
int main()
{
// 创建数据对象并做初始化
StudentInfo stu = {"张三", 18, 95.5};
StudentInfo stu1 = { "李四", 20, 85 };
StudentInfo stuCopy = stu3;
stu2.name = "王五";
stu2.age = 12;
stu2.score = 65;
printInfo(stuCopy);
printInfo(stu);
printInfo(stu1);
printInfo(stu2);
// 定义结构体数组
StudentInfo s[3] = {
{"孙行者", 18, 85.2},
{"行者孙", 20, 96.2},
{"者行孙", 23, 85.2}
};
for (StudentInfo stu : s) {
printInfo(stu);
}
cin.get();
}
四、 枚举
当遇到某个数据对象只能取有限个常量值的情况时(比如一周七天),C++提供了另一种批量创建符号常量的方式,可以替代 cont,即枚举类型 enum。
与结构体不同的是,枚举类型内只有有限个名字,它们都各自代表一个常量,被称为 “枚举量”。
#include<iostream>
using namespace std;
enum Week
{
Mon, Tue, Wed, Thu = 10, Fri, Sat, Sun
};
int main()
{
Week w1 = Mon;
Week w3 = Week(3);
Week w4 = Thu;
Week w5 = Fri;
cout << "w1 = " << w1 << endl; // 0
cout << "w3 = " << w3 << endl; // 3
cout << "w4 = " << w4 << endl; // 10
cout << "w5 = " << w5 << endl; // 11
cin.get();
}
总结
本篇文章我们认识了字符串、文件的读写,并认识了结构体和枚举的使用方式等。总体内容比较简单,有个大体的理解就可以。
好啦,本篇文章到这里就要和大家说再见啦,祝你这篇文章阅读愉快,你下篇文章的阅读愉快留着我下篇文章再祝!
参考资料:
- 百度百科 · C++
- 2023最新版C++【作者:bilibili-尚硅谷】