C++——字符串、读写文件、结构体、枚举

news2024/9/23 11:27:34

个人简介

👀个人主页: 前端杂货铺
🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展
📃个人状态: 研发工程师,现效力于中国工业软件事业
🚀人生格言: 积跬步至千里,积小流成江海
🥇推荐学习:🍍前端面试宝典 🍉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();
}

总结

本篇文章我们认识了字符串、文件的读写,并认识了结构体和枚举的使用方式等。总体内容比较简单,有个大体的理解就可以。

好啦,本篇文章到这里就要和大家说再见啦,祝你这篇文章阅读愉快,你下篇文章的阅读愉快留着我下篇文章再祝!


参考资料:

  1. 百度百科 · C++
  2. 2023最新版C++【作者:bilibili-尚硅谷】

在这里插入图片描述


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

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

相关文章

【Java】高级篇1:异常处理

异常&#xff1a;程序在执行过程中出现的非正常情况&#xff0c;如果不处理最终会导致JVM的非正常停止。 Java的异常抛出机制 Java异常体系 1、Throwable 2、Error和Exception 异常处理方式 1、try-catch-finally&#xff08;捕获异常&#xff09; 基本结构&#xff1a; 使用…

B140XW01 V8 +OZ9956B PDF

B140XW01 V8 PDF OZ9956B 14B38-COW 18650串联50欧点亮一颗灯珠

代码随想录算法训练营第11天| 20. 有效的括号,1047. 删除字符串中的所有相邻重复项,150. 逆波兰表达式求值

系列文章目录 目录 系列文章目录20. 有效的括号利用栈对称匹配将栈中元素弹出与判断栈顶元素是否匹配分开&#xff0c;比较耗时&#xff08;2ms)&#xff1a;若将栈中元素弹出与判断栈顶元素是否匹配放一起&#xff0c;比较节省时间(1ms)&#xff1a; 1047. 删除字符串中的所有…

探索区块链世界:从加密货币到去中心化应用

相信提到区块链&#xff0c;很多人会想到比特币这样的加密货币&#xff0c;但实际上&#xff0c;区块链技术远不止于此&#xff0c;它正在深刻地改变我们的生活和商业。 首先&#xff0c;让我们来简单了解一下什么是区块链。区块链是一种分布式数据库技术&#xff0c;它通过将…

MySQL的insert-on-duplicate语句详解

一、insert-on-duplicate语句语法 注意&#xff1a;ON DUPLICATE KEY UPDATE只是 MySQL的特有语法&#xff0c;并不是SQL标准语法&#xff01; INSERT INTO … ON DUPLICATE KEY UPDATE 是 MySQL 中一种用于插入数据并处理重复键冲突的语法。 这个语法适用于在 insert的时候…

操作系统核心知识点大梳理

计算机结构 现代计算机模型是基于-冯诺依曼计算机模型 计算机在运行时&#xff0c;先从内存中取出第一条指令&#xff0c;通过控制器的译码&#xff0c;按指令的要求&#xff0c;从存储器中取出数据进行指定的运算和逻辑操作等加工&#xff0c;然后再按地址把结果送到内存中去…

做跨境用哪种代理IP比较好?怎么选到干净的IP?

代理IP对于做跨境的小伙伴来说&#xff0c;都是必不可少的工具&#xff0c;目前出海的玩法已经是多种多样&#xff0c;开店、账号注册、短视频运营、直播带货、网站SEO等等都是跨境人需要涉及到的业务。而国外代理IP的获取渠道非常多&#xff0c;那么做跨境到底应该用哪种代理I…

Servlet两种配置

通过xml配置 <servlet><servlet-name>MyServlet</servlet-name><servlet-class>MyServlet</servlet-class> </servlet> <servlet-mapping><servlet-name>MyServlet</servlet-name><url-pattern>/MyServlet</ur…

Excel数据可视化

饼图 1、选中数据----点击插入----点击饼图 2、更改数据标签&#xff08;修改标题名直接改就行&#xff09; 柱形图 1、选中数据、点击插入二维柱形图 坐标轴问题----切换行和列 如何将横轴变成想要的4、5、6、7月&#xff1f; &#xff08;1&#xff09;右键----选择数据 -…

传值、传址、空间释放详细图解

目录 前言 一.进程 1.1 进程的映射 1.2 进程的虚拟空间 二.函数传参 2.1 函数传参 2.2 函数传值 2.2.1 函数传值案例1 2.2.2 函数传值案例2 2.2.3 返回值为常量 2.3 函数传送地址 2.3 字符串使用 前言 详细介绍函数传值和传地址区别&#xff1a;进行数据操作的区别&#xff0c…

08|记忆:通过Memory记住客户上次买花时的对话细节

无论是LLM还是代理都是无状态的&#xff0c;每次模型的调用都是独立于其他交互的。也就是说&#xff0c;我们每次通过API开始和大语言模型展开一次新的对话&#xff0c;它都不知道你其实昨天或者前天曾经和它聊过天了。 使用ConversationChain from langchain import OpenAI…

中国国际光伏展

河北省京津冀国际光伏展是一个旨在推动光伏产业发展的展览会。该展览会的举办地点在河北省&#xff0c;也被称为京津冀地区&#xff0c;这个地区是中国重要的经济发展区域之一&#xff0c;拥有丰富的太阳能资源和光伏产业基础。 光伏展览会将展示最新的光伏技术、产品和解决方案…

ABS210-ASEMI新能源专用整流桥ABS210

编辑&#xff1a;ll ABS210-ASEMI新能源专用整流桥ABS210 型号&#xff1a;ABS210 品牌&#xff1a;ASEMI 封装&#xff1a;ABS-4 正向电流&#xff08;Id&#xff09;&#xff1a;2A 反向耐压&#xff08;VRRM&#xff09;&#xff1a;1000V 正向浪涌电流&#xff1a;3…

Fabric.js在vue2中使用

Fabric.js安装 这里我是基于vue来使用的&#xff0c;先安装上Fabric.js npm install fabric 在main.js中 import fabric from fabric Vue.use(fabric);Fabric 提供了 7 种基础形状&#xff1a; fabric.Circle (圆)fabric.Ellipse (椭圆)fabric.Line (线)fabric.Polyline (多条…

汽车电子零部件(8):T_Box

前言: 网联汽车(Connected Vehicles ,CV)是一个广泛的概念,四个主要的CV线程已发展起来:互联、自主、共享和电动。这些应用于包括CV在内的垂直领域:汽车、通信、互联网和共享手机服务。中国汽车工程师学会(SAEC)提倡将车载ADAS(高级驾驶员辅助系统)与通信技术相结合…

概述工业4.0时代的数据采集

在当今全球制造业转型升级的大潮中&#xff0c;工业4.0以其智能化、网络化和个性化的特征&#xff0c;引领了新的工业革命。其中&#xff0c;数据采集作为工业4.0的核心要素&#xff0c;是实现智能制造的关键环节&#xff0c;它的重要性不言而喻。 工业4.0时代的数据采集&#…

Linux中判断某个Docker容器服务的内存是否超过临界值,比如到达10G,则在凌晨4点执行定时任务执行重新构建命令

监测NAME是blade-jiangxinzhougarden的服务&#xff0c;如果内存&#xff08;MEM USAGE&#xff09;超过10G则在凌晨4点执行重新构建命令 1.编写脚本文件restart_jxz.sh #!/bin/bash# 设置要监控的容器名称或服务名称(替换成你的服务名) SERVICE_NAME"blade-jiangxinzhou…

SpringSecurity(SpringBoot2.X版本实现)

资料来源于 SpringSecurity框架教程-Spring SecurityJWT实现项目级前端分离认证授权 侵权删 目录 介绍 快速开始 认证 认证流程 登录校验流程 SpringSecurity完整流程 认证流程详解 代码实现 准备工作 mysql mybatis-plus redis 统一返回类 核心代码 密码加密存…

前端UI框架是不是大厂给中小企业“画地为牢”?

先说结论&#xff1a;不能说全是吧&#xff0c;但也大部分是。大厂赏饭&#xff08;开源&#xff09;给你吃&#xff0c;你就得按照他的规矩来。 一、大厂为什么喜欢开源 大厂愿意开源他们的前端框架有以下几个原因&#xff1a; 社区贡献&#xff1a;开源框架可以吸引更多的开…

【简写Mybatis】04-数据源的解析、创建和使用

前言 在学习MyBatis源码文章中&#xff0c;斗胆想将其讲明白&#xff1b;故有此文章&#xff0c;如有问题&#xff0c;不吝指教&#xff01; 注意&#xff1a; 学习源码一定一定不要太关注代码的编写&#xff0c;而是注意代码实现思想&#xff1b; 通过设问方式来体现代码中的…