C10.【C++ Cont】字符数组和万能头

news2025/1/24 8:47:16

目录

1.字符数组

1.初始化

1.按字符串初始化

2.按字符初始化

2.字符串的输入

1.无空格的字符串

2.带空格的字符串

解决方法

1.gets(了解即可)

gets不安全的原因

2.fgets

3.改良后的scanf

4.getchar

3.字符数组的输出

2.C++万能头


1.字符数组

C语言风格的字符串:用双引号包含的字符串,如printf("Hello World!")

1.初始化

1.按字符串初始化

char arr[]="abcdef";
//或者
char arr[]={"abcdef"};

字符串的末尾有隐藏的\0,具体可以用VS的监视窗口查看

2.按字符初始化

char arr[]={'a','b','c','d','e','f'};

此时没有隐藏的\0

求字符数组的长度:strlen (需要包含<cstring>头文件),具体用法见20.5.【C语言】求长度(sizeof和strlen)的两种方式

2.字符串的输入

1.无空格的字符串

char arr[5];
cin>>arr;
cin>>arr+1;//从arr的第二个元素开始写入
//或者
scanf("%s",arr);
scanf("%s",arr+1);

注:存储字符串时不能越界!

2.带空格的字符串

使用scanf读取会出现问题,遇到空格,scanf会停止读取,问题出在"%s"(详细解释可见文章32.【C语言】详解scanf的7点注意)

使用cin读取也会出现问题,遇到空白字符的时也会停止读取,之后将已经读取到的字符串末尾加上\0

解决方法
1.gets(了解即可)

cplusplus的介绍 点我跳转

gets(由于安全原因不建议用,C++11不支持,建议用fgets!):从标准输入流(stdin)中读取字符串

char * gets ( char * str );

特点:

1.从第一个字符开始读取,一直读取到\n(注意这里不是\0!!!,中途遇到\0会继续读取后面的内容)停止,但不会读取\n,即读取到的内容中没有包含\n

2.在读取到的内容的末尾自动加上\0

char arr[10];
gets(arr);
gets不安全的原因

进入VS2010环境,测试以下代码

#include <iostream>
using namespace std;
int main()
{
	char arr[3];
	gets(arr);
	return 0;
}

窗口输入较长的字符串

因为gets不检查输入字符串的长度,导致输入的字符串可能超过分配给它的缓冲区大小,显然会导致缓冲区溢出!

2.fgets

cplusplus的介绍 点我跳转

fgets:从流中读取字符串

char * fgets ( char * str, int num, FILE * stream );

如果想要读取从键盘键入(stdin)的字符串,写成fgets(数组名,读取的字符个数num,stdin);

注意:

1.fgets从第一个字符开始读取,最多读取num-1个字符,最后一个位置留给\0(和gets一样也会在字符串的末尾补\0),即num包含fgets添加的一个\0
2.如果num的长度是远大于输入的字符串长度,就会一直读取到\n停止,并且会读取\n,将\n 作为读取到内容的一部分,同时在读取到的内容后自动加上\0

验证第2点:VS上测试以下代码

#include <iostream>
using namespace std;
int main()
{
	char arr[15];
	fgets(arr, 15, stdin);
	return 0;
}

先下断点至return 0;,之后窗口输入123 456后回车,打开监视窗口查看arr

3.改良后的scanf
scanf("%[^\n]s",arr);

 [^\n]表示直到读取到\n才停止读取,不会将\n读取进来,但会在字符串的末尾添加\0

4.getchar

具体参见24.【C语言】getchar和putchar的使用文章

写法1

#include <iostream>
using namespace std;
int main()
{
	char arr[10];//没有初始化
	char ch;
	int i=0; 
	while ((ch=getchar())!='\n')
	{
	    arr[i]=ch;
	    i++; 
	}
	arr[i]='\0';//末尾补\0
	cout<<arr; 
	return 0;
}

写法2

#include <iostream>
using namespace std;
int main()
{
	char arr[10]={0};//已初始化
	char ch;
	int i=0; 
	while ((ch=getchar())!='\n')
	{
	    arr[i]=ch;
	    i++; 
	}
	cout<<arr; 
	return 0;
}

特别注意:while ((ch=getchar())!='\n')不能写成while (ch=getchar()!='\n')!!!

赋值运算符的优先级小于!=,会先执行getchar()!='\n'!

3.字符数组的输出

printf或cout或循环逐个打印字符

2.C++万能头(竞赛推荐)

添加#include<bits/stdc++.h>后一劳永逸,不用考虑调用某个函数前需要包含对应的头文件

万能头是以下头文件的集合体

<iostream> <cstdio> <fstream> <algorithm> <cmath> <deque> <vector> <queue> <string>

<cstring> <map> <stack> <set>

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

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

相关文章

[C++]C++工具之对异常情况的处理(throw、catch、try)以及用命名空间避免同名冲突

一、C 异常处理&#x1f60a; 1.1 定义 C 中的异常处理用于应对程序运行中的异常情况&#xff08;如除零、数组越界等&#xff09;&#xff0c;通过 try-catch 机制捕获和处理错误&#xff0c;防止程序崩溃。 异常是程序运行时意外发生的事件&#xff0c;可以通过抛出&#xf…

番外篇 | Hyper-YOLO:超图计算与YOLO架构相结合成为目标检测新的SOTA !

前言:Hello大家好,我是小哥谈。Hyper-YOLO,该方法融合了超图计算以捕捉视觉特征之间复杂的高阶关联。传统的YOLO模型虽然功能强大,但其颈部设计存在局限性,限制了跨层特征的融合以及高阶特征关系的利用。Hyper-YOLO在骨干和颈部的联合增强下,成为一个突破性的架构。在COC…

IDEA搭建springboot demo

如下所示创建SpringBootTest18项目&#xff0c;我选的maven&#xff0c;创建完成项目后&#xff0c;maven会自动下载一些依赖库到maven的repository目录中。 创建的项目结构如下图所示 接下来在项目中加入Framework支持&#xff0c;右击项目&#xff0c;弹出的菜单如下图所示&a…

vscode不同项目使用不同插件

转载请注明出处&#xff1a;小帆的帆的博客 在使用vscode开发不同项目时可能会用到不同的插件。手动管理不够优雅&#xff0c;本文介绍使用Profiles的方式的来管理不同项目的插件。 手动管理不同项目的插件 本来vscode安装了有三个插件 这时需要新建一个项目&#xff0c;新…

【FFmpeg】解封装 ① ( 封装与解封装流程 | 解封装函数简介 | 查找码流标号和码流参数信息 | 使用 MediaInfo 分析视频文件 )

文章目录 一、解封装1、封装与解封装流程2、解封装 常用函数 二、解封装函数简介1、avformat_alloc_context 函数2、avformat_free_context 函数3、avformat_open_input 函数4、avformat_close_input 函数5、avformat_find_stream_info 函数6、av_read_frame 函数7、avformat_s…

PDFMathTranslate 一个基于AI优秀的PDF论文翻译工具

PDFMathTranslate 是一个设想中的工具&#xff0c;旨在翻译PDF文档中的数学内容。以下是这个工具的主要特点和使用方法&#xff1a; 链接&#xff1a;https://www.modelscope.cn/studios/AI-ModelScope/PDFMathTranslate 功能特点 数学公式识别&#xff1a;利用先进的OCR&…

20241218_segmentation

参考&#xff1a; 使用SA模型 https://ai.meta.com/research/publications/segment-anything/讲解生物学意义 https://www.nature.com/articles/s41593-024-01714-3#Sec13 x.0 workflow 图像分割方法识别出重要的ROI区域计算ROI区域个数&#xff08;需要计算机算法&#xff…

Ubuntu22.04配置3D gaussian splatting

这篇博客提供了3D gaussian splatting在新安装Ubuntu上的配置过程。 1.拉仓库 2.安装显卡驱动和cuda版本 3.安装Pytorch 4.安装Pycharm和配置Python 5.安装附加依赖项&#xff08;方法一&#xff09; 6.安装Anaconda&#xff08;方法二&#xff09; 7.测试 1.拉仓库 # HT…

Apache Kylin最简单的解析、了解

官网&#xff1a;Overview | Apache Kylin 一、Apache Kylin是什么&#xff1f; 由中国团队研发具有浓厚的中国韵味&#xff0c;使用神兽麒麟&#xff08;kylin&#xff09;为名 的一个OLAP多维数据分析引擎:&#xff08;据官方给出的数据&#xff09; 亚秒级响应&#xff…

【现代服务端架构】传统服务器 对比 Serverless

在现代开发中&#xff0c;选择合适的架构是至关重要的。两种非常常见的架构模式分别是 传统服务器架构 和 Serverless。它们各有优缺点&#xff0c;适合不同的应用场景。今天&#xff0c;我就带大家一起对比这两种架构&#xff0c;看看它们的差异&#xff0c;并且帮助你选择最适…

CVE-2024-32709 WordPress —— Recall 插件存在 SQL 注入漏洞

漏洞描述 WordPress 是一款免费开源的内容管理系统,适用于各类网站,包括个人博客、电子商务系统、企业网站。其插件 WP-Recall 的 account 存在 SQL 注入漏洞,攻击者可以通过该漏洞获取数据库敏感信息。 WP-Recall 版本 <= 16.26.5 漏洞复现 搭建环境、安装插件、完成…

vue+net使用stripe支付开发流程

文章目录 前言用到的语言和技术整体流程stripe平台vue前端Net后端遇到的问题思考总结 前言 公司最近做到了国外支付功能&#xff0c;最后选型使用stripe进行支付&#xff0c;实现目标&#xff1a;使用stripe支付可以让国外用户自己选择支付方式并订阅支付。 用到的语言和技术…

什么?Flutter 可能会被 SwiftUI/ArkUI 化?全新的 Flutter Roadmap

在刚刚过去的 FlutterInProduction 活动里&#xff0c;Flutter 官方除了介绍「历史进程」和「用户案例」之外&#xff0c;也着重提及了未来相关的 roadmap &#xff0c;其中就有 3.27 里的 Swift Package Manager 、 Widget 实时预览 和 Dart 与 native 平台原生语言直接互操作…

随机森林算法原理

随机森林算法原理 算法流程随机森林的生成随机森林的预测 算法总结随机森林的优点随机森林的缺点 算法流程 随机森林的生成 输入训练数据 D&#xff0c;样本个数为 m &#xff0c;待学习的决策树数量为 T。 对于 t 1,2,…,T&#xff0c;从 D 中有放回地采样 m 次&#xff0c…

游戏AI实现-寻路算法(Dijkstra)

戴克斯特拉算法&#xff08;英语&#xff1a;Dijkstras algorithm&#xff09;&#xff0c;又称迪杰斯特拉算法、Dijkstra算法&#xff0c;是由荷兰计算机科学家艾兹赫尔戴克斯特拉在1956年发现的算法。 算法过程&#xff1a; 1.首先设置开始节点的成本值为0&#xff0c;并将…

基于MNE的EEGNet 神经网络的脑电信号分类实战(附完整源码)

利用MNE中的EEG数据&#xff0c;进行EEGNet神经网络的脑电信号分类实现&#xff1a; 代码&#xff1a; 代码主要包括一下几个步骤&#xff1a; 1&#xff09;从MNE中加载脑电信号&#xff0c;并进行相应的预处理操作&#xff0c;得到训练集、验证集以及测试集&#xff0c;每个…

Element@2.15.14-tree checkStrictly 状态实现父项联动子项,实现节点自定义编辑、新增、删除功能

背景&#xff1a;现在有一个新需求&#xff0c;需要借助树结构来实现词库的分类管理&#xff0c;树的节点是不同的分类&#xff0c;不同的分类可以有自己的词库&#xff0c;所以父子节点是互不影响的&#xff1b;同样为了选择的方便性&#xff0c;提出了新需求&#xff0c;选择…

SAP-ABAP开发学习-面向对象开发ooalv(2)

SAP-ABAP开发学习-面向对象OOALV&#xff08;1&#xff09;-CSDN博客 本文目录 一、类的继承 多态性类继承的实现 二、抽象类 三、最终类 四、接口 五、定义全局对象 一、类的继承 继承的本质是代码重用。当我们要构造一个新类时&#xff0c;无需从零开始&#xff0c;可…

典型案例 | 旧PC新蜕变!东北师范大学依托麒麟信安云“旧物焕新生”

东北师范大学始建于1946年&#xff0c;坐落于吉林省长春市&#xff0c;是中国共产党在东北地区创建的第一所综合性大学。作为国家“双一流”建设高校&#xff0c;学校高度重视教学改革和科技创新&#xff0c;校园信息化建设工作始终走在前列。基于麒麟信安云&#xff0c;东北师…

Linux脚本语言学习--上

1.shell概述 1.1 shell是什么&#xff1f; Shell是一个命令行解释器&#xff0c;他为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序&#xff0c;用户可以使用Shell来启动&#xff0c;挂起&#xff0c;停止甚至是编写一些程序。 Shell还是一个功能相当强大…