当前位置: 首页 > news >正文

C++014-C++字符串

文章目录

  • C++014-C++字符串
    • 字符串
      • 目标
      • char[]和string
        • char[]
        • char*
        • string
      • 字符常量与字符串常量
      • 字符串的输入
      • 题目描述 字符串输出
      • 题目描述
    • 在线练习:
    • 总结

C++014-C++字符串

在这里插入图片描述

在线练习:
http://noi.openjudge.cn/
https://www.luogu.com.cn/

字符串

目标

1、了解字符串的基本概念
2、掌握字符串输入输出方法
3、掌握字符串复制、拼接、比较大小、求长度等方法

参考:https://www.cnblogs.com/zhaoyunt/p/15360127.html

char[]和string

先阐述C++中char[],string的区别和联系.

char[]

#include <iostream>
using namespace std;
int main()
{char a[10] = "123";a[4]='5';a[3]='4';cout << a;return 0;
}
// 输出:12345,此程序在a[5]的位置自动写入了'\0',终止符

在这里插入图片描述

注意:这里的char [] 数组,
如果是全局变量,静态变量,一般编译器(具体要依赖于具体所使用的编译器和系统)会采用默认原则将内部的所有位置设置为0;
如果是局部变量,由于局部变量的内存分配是在栈上,如果未对char数组进行初始化的话,数组内的数据取决于此处原来的数据。同理,动态变量在堆上,同样数据为任意值。

char*

参考:https://blog.csdn.net/weixin_42322256/article/details/121450646
1、字符串char*

char *str1="abcde";  //这是一个字符串常量,存储在静态存储区,是只读的。
const char *str1 = "abcde";
char const *str1 = "abcde"; //注意,这两种写法等价
//其中,str1是一个变量,代表的意思就是字符串的第一个字符的值

案例

#include <iostream>
using namespace std;
int main()
{char arr[] = "abcdef";char* pc2 = arr;   //数组首元素地址赋值给指针pc2,指针大小只有4字节不可能放下整个数组cout << *pc2 << endl;   //输出是a,说明pc2存放的只是数组首元素地址cout << pc2 << endl;    //abcdef ,表示从pc2指向的地址位置开始打印cout << arr << endl;    //abcdefreturn 0;
}

输出为:
在这里插入图片描述

此处参照此博客:

关于字符串常量&字符数组&字符常量:https://blog.csdn.net/wuwuku123/article/details/103575620

const char * 、char const * 、 char * const 三者的区别:https://blog.csdn.net/qq_40244176/article/details/80765975

string

char是一个字符类型 C++的内置类型,char *是字符指针;
而string是一个字符容器,是一个扩展的模版类。
(一)、先解释char*字符串和string对象的区别。

1、定义

string:string是C++STL当中的一个容器,对其进行了封装,所以操作起来非常方便。
char*:char*是一个指针,可以指向一个字符串数组,至于这个数组可以在栈上分配,也可以在堆上分配,堆得话就要你手动释放了。

2、区别:

string的内存管理是由系统处理,除非系统内存池用完,不然不会出现这种内存问题。
char*的内存管理由用户自己处理,很容易出现内存不足的问题。
当我们要存一个串,但是不知道其他需要多少内存时,用string来处理就最好不过了。
当你知道了存储的内存的时候,可以用char*,但是不如用string的好,用指针总会有隐患。

用string还可以使用各种成员函数来处理串的每一个字符,方便处理。
用char*处理串,就不如string的方便了,没有相应的函数来直接调用,而是要自己编写函数来完成串的处理,而且处理过程中用指针还很容易出现内存问题。

3、注意:

当我们定义了一个string,就不能用scanf(“%s”,s)和printf(“%s”,s)输入输出。主要是因为%s要求后面是对象的首地址。

#include <iostream>
#include <string>
using namespace std;int main(){string s1;//变量 s1 只是定义但没有初始化,编译器会将默认值赋给 s1,默认值是"",也即空字符串。string s2 = "c plus plus";//变量 s2 在定义的同时被初始化为"c plus plus"。与C风格的字符串不同,string 的结尾没有结束标志'\0'。string s3 = s2;//变量 s3 在定义的时候直接用 s2 进行初始化,因此 s3 的内容也是"c plus plus"。string s4 (5, 's');//变量 s4 被初始化为由 5 个's'字符组成的字符串,也就是"sssss"。return 0;
}

从上面的代码可以看出,string 变量可以直接通过赋值操作符=进行赋值。string 变量也可以用C风格的字符串进行赋值,例如,s2 是用一个字符串常量进行初始化的,而 s3 则是通过 s2 变量进行初始化的。

字符常量与字符串常量

在这里插入图片描述

字符串的输入

1.cin>>字符串名;

string s1;//定义一个字符串变量s1
cin>>s1;//直接输入s1字符串

【注意】cin语句不会输入空格、换行符等分隔符(输入后,空格、换行符仍然留在输入缓冲区);

  1. getline(cin,字符串名);
string s1;
getline(cin,s1);//获取一行;

题目描述 字符串输出

【描述】
输入两个单词,用空格隔开,然后分两行分别输出这两个单词
【输入】
1行,两个单词,用空格分隔;
【输出】
2行,两个单词,每个单词一行;

#include <iostream>
#include <string>
using namespace std;int main(){string s1,s2;cin>>s1>>s2;cout<<s1<<endl<<s2;return 0;
}

在这里插入图片描述

题目描述

【描述】
输入一个数字,这个数字可能是1也可能是2,然后分两行输入两个英文语句。如果是1就输出第一个句子,如果是2就输出第二个句子
【输入】
3行;第1行是一个数字;接下来的两行是2句英文句子。注意,句子中会存在空格,以换行符结束;
【输出】
1行,1个句子;
【样例输入】
1
l am a student.
My name is Hanmeimei.
【样例输出】
l am a student.

代码

#include <iostream>
#include <string>
using namespace std;int main(){int n;string s1,s2;cin>>n;getline(cin,s1);getline(cin,s1);getline(cin,s2);if(n==1) cout<<s1;else cout<<s2;return 0;
}

在这里插入图片描述

在线练习:

http://noi.openjudge.cn/

总结

本系列为C++学习系列,会介绍C++基础语法,基础算法与数据结构的相关内容。本文为C++字符串案例,包括相关案例练习。

相关文章:

C++014-C++字符串

文章目录C014-C字符串字符串目标char[]和stringchar[]char*string字符常量与字符串常量字符串的输入题目描述 字符串输出题目描述在线练习&#xff1a;总结C014-C字符串 在线练习&#xff1a; http://noi.openjudge.cn/ https://www.luogu.com.cn/ 字符串 目标 1、了解字符串…...

Android 架构 MVC MVP MVVM,这一波你应该了然于心

MVC&#xff0c;MVP和MVVM是软件比较常用的三种软件架构&#xff0c;这三种架构的目的都是分离&#xff0c;避免将过多的逻辑全部堆积在一个类中。在Android中&#xff0c;Activity中既有UI的相关处理逻辑&#xff0c;又有数据获取逻辑&#xff0c;从而导致Activity逻辑复杂不单…...

物联网在医疗保健领域的5大创新应用

如今&#xff0c;物联网的发展越来越迅速&#xff0c;我们无法低估物联网在当今世界的重要性。大多数人每天都会使用到物联网设备。例如&#xff0c;当你使用智能手表来跟踪你的锻炼时&#xff0c;你就间接地使用了物联网的功能。由于物联网为世界带来了很多有效的帮助&#xf…...

【一天一门编程语言】Haskell 语言程序设计极简教程

Haskell 语言程序设计极简教程 一、什么是 Haskell Haskell 是一种纯函数式编程语言&#xff0c;它把程序设计抽象化到一个更高的层次&#xff0c;简化程序开发工作量&#xff0c;能够更快更容易地完成任务。 它是一种函数式编程语言&#xff0c;它采用函数式编程方法&#…...

getStaticPaths函数 以及 fallback参数

getStaticPaths是Next.js的一个静态生成API&#xff0c;它用于在构建时确定哪些页面需要被预渲染。它需要返回一个包含params属性的对象数组&#xff0c;其中每个对象都代表一个路径参数集合&#xff0c;可以被预渲染为一个静态页面。如果所有参数都已知&#xff0c;它们将被硬…...

msys2+minGW方案编译ffmpeg的最佳实践

一、Win10 64bit编译环境的建立1&#xff09;从http://www.msys2.org/下载 msys2-x86_64-xxx.exe2&#xff09; 安装msys2到默认路径 C:\msys64\3&#xff09; 运行MSYS2 w644&#xff09;执行 pacman -Syu 更新系统当出现提示时&#xff0c;选择y5) 当窗口关闭时&#xff0c;重…...

理解redis的数据结构

redis为什么快&#xff1f; 首先可以想到内存读写数据本来就快&#xff0c;然后IO复用快&#xff0c;单线程没有静态消耗和锁机制快。 还有就是数据结构的设计快。这是因为&#xff0c;键值对是按一定的数据结构来组织的&#xff0c;操作键值对最终就是对数据结构进行增删改查操…...

Lecture6 逻辑斯蒂回归(Logistic Regression)

目录 1 常用数据集 1.1 MNIST数据集 1.2 CIFAR-10数据集 2 课堂内容 2.1 回归任务和分类任务的区别 2.2 为什么使用逻辑斯蒂回归 2.3 什么是逻辑斯蒂回归 2.4 Sigmoid函数和饱和函数的概念 2.5 逻辑斯蒂回归模型 2.6 逻辑斯蒂回归损失函数 2.6.1 二分类损失函数 2.…...

File类及IO流说明

目录 1.File类说明 (1)构造方法创建文件 (2)创建功能 (3)File类的判断和获取功能 (4)文件删除功能 2.I/O流说明 (1).分类 3.字节流写数据 (1)说明 (2)字节流写数据的三种方式 (3)写入时实现换行和追加写入 (4)异常处理中加入finally实现资源的释放 4.字节流读数据 …...

优秀的网络安全工程师应该有哪些能力?

网络安全工程师是一个各行各业都需要的职业&#xff0c;工作内容属性决定了它不会只在某一方面专精&#xff0c;需要掌握网络维护、设计、部署、运维、网络安全等技能。目前稍有经验的薪资在10K-30K之间&#xff0c;全国的网络安全工程师还处于一个供不应求的状态&#xff0c;因…...

[C++11] auto初始值类型推导

背景&#xff1a;旧标准的auto 在旧标准中&#xff0c;auto代表“具有自动存储期的 局部变量” auto int i 0; //具有自动存储期的局部变量 //C98/03&#xff0c;可以默认写成int i0; static int j 0; //静态类型的定义方法实际上&#xff0c;我们很少使用auto&#xff0c…...

【Java】List集合去重的方式

List集合去重的方式方式一&#xff1a;利用TreeSet集合特性排序去重&#xff08;有序&#xff09;方式二&#xff1a;利用HashSet的特性去重&#xff08;无序&#xff09;方式三&#xff1a;利用LinkedHashSet去重&#xff08;有序&#xff09;方式四&#xff1a;迭代器去重&am…...

每个人都应该知道的5个NLP代码库

在本文中&#xff0c;将详细介绍目前常用的Python NLP库。内容译自网络。这些软件包可处理多种NLP任务&#xff0c;例如词性&#xff08;POS&#xff09;标注&#xff0c;依存分析&#xff0c;文档分类&#xff0c;主题建模等等。NLP库的基本目标是简化文本预处理。目前有许多工…...

SPI协议介绍

SPI协议介绍 文章目录SPI协议介绍一、 SPI硬件知识1.1 硬件连线1.2 SPI控制器内部结构二、 SPI协议2.1 传输示例2.2 SPI模式致谢一、 SPI硬件知识 1.1 硬件连线 引脚含义如下&#xff1a; 引脚含义DO(MOSI)Master Output, Slave Input&#xff0c;SPI主控用来发出数据&#x…...

MySQL数据库中索引的优点及缺点

一、索引的优点 1&#xff09;创建索引可以大幅提高系统性能&#xff0c;帮助用户提高查询的速度&#xff1b; 2&#xff09;通过索引的唯一性&#xff0c;可以保证数据库表中的每一行数据的唯一性&#xff1b; 3&#xff09;可以加速表与表之间的链接&#xff1b; 4&#…...

(q)sort函数总结(基础篇)

1.sort函数 介绍&#xff1a;这是一个C的函数&#xff0c;包含于algorithm头文件中。 基本格式&#xff1a; sort(起始地址&#xff08;常为变量名&#xff09;&#xff0c;排序终止的地址&#xff08;变量名加上排序长度&#xff09;&#xff0c;自定义的比较函数) 重点&a…...

【数据库】MongoDB数据库详解

目录 一&#xff0c;数据库管理系统 1&#xff0c; 什么是数据库 2&#xff0c;什么是数据库管理系统 二&#xff0c; NoSQL 是什么 1&#xff0c;NoSQL 简介 2&#xff0c;NoSQL数据库 3&#xff0c;NoSQL 与 RDBMS 对比 三&#xff0c;MongoDB简介 1&#xff0c; MongoDB 是什…...

【linux】进程间通信——system V

system V一、system V介绍二 、共享内存2.1 共享内存的原理2.2 共享内存接口2.2.1 创建共享内存shmget2.2.2 查看IPC资源2.2.3 共享内存的控制shmctl2.2.4 共享内存的关联shmat2.2.5 共享内存的去关联shmdt2.3 进程间通信2.4 共享内存的特性2.5 共享内存的大小三、消息队列3.1 …...

计算机网络的基本组成

计算机网络是由多个计算机、服务器、网络设备&#xff08;如路由器、交换机、集线器等&#xff09;通过各种通信线路&#xff08;如有线、无线、光纤等&#xff09;和协议&#xff08;如TCP/IP、HTTP、FTP等&#xff09;互相连接组成的复杂系统&#xff0c;它们能够在物理层、数…...

【数据结构趣味多】Map和Set

1.概念及场景 Map和set是一种专门用来进行搜索的容器或者数据结构&#xff0c;其搜索的效率与其具体的实例化子类有关。 在此之前&#xff0c;我还接触过直接查询O(N)和二分查询O(logN)&#xff0c;这两个查询有很多不足之出&#xff0c;直接查询的速率太低&#xff0c;而二分查…...

Redis 之企业级解决方案

文章目录一、缓存预热二、缓存雪崩三、缓存击穿四、缓存穿透五、性能指标监控5.1 监控指标5.2 监控方式&#x1f34c;benchmark&#x1f34c;monitor&#x1f34c;slowlog提示&#xff1a;以下是本篇文章正文内容&#xff0c;Redis系列学习将会持续更新 一、缓存预热 1.1 现象…...

雷达实战之射频前端配置说明

在无线通信领域&#xff0c;射频系统主要分为射频前端,以及基带。从发射通路来看&#xff0c;基带完成语音等原始信息通过AD转化等手段转化成基带信号&#xff0c;然后经过调制生成包含跟多有效信息&#xff0c;且适合信道传输的信号&#xff0c;最后通过射频前端将信号发射出去…...

Android SDK删除内置的触宝输入法

问题 Android 8.1.0&#xff0c; 展锐平台。 过CTA认证&#xff0c;内置的触宝输入法会连接网络&#xff0c;且默认就获取到访问网络的权限&#xff0c;没有弹请求窗口访问用户&#xff0c;会导致过不了认证。 预置应用触宝输入法Go版连网未明示&#xff08;开启后&#xff0…...

[202002][Spring 实战][第5版][张卫滨][译]

[202002][Spring 实战][第5版][张卫滨][译] habuma/spring-in-action-5-samples: Home for example code from Spring in Action 5. https://github.com/habuma/spring-in-action-5-samples 第 1 部分 Spring 基础 第 1 章 Spring 起步 1.1 什么是 Spring 1.2 初始化 Spr…...

H5视频上传与播放

背景 需求场景&#xff1a; 后台管理系统&#xff1a; &#xff08;1&#xff09;配置中支持上传视频、上传成功后封面缩略图展示&#xff0c;点击后自动播放视频&#xff1b; &#xff08;2&#xff09;配置中支持上传多个文件&#xff1b; 前台系统&#xff1a; &#…...

通过OpenAI来做机械智能故障诊断-测试(1)

通过OpenAI来做机械智能故障诊断 1. 注册使用2. 使用案例1-介绍故障诊断流程2.1 对话内容2.2 对话小结3. 使用案例2-写一段轴承故障诊断的代码3.1 对话内容3.2 对话小结4. 对话加载Paderborn轴承故障数据集并划分4.1 加载轴承故障数据集并划分第一次测试4.2 第二次加载数据集自…...

ASE40N50SH-ASEMI高压MOS管ASE40N50SH

编辑-Z ASE40N50SH在TO-247封装里的静态漏极源导通电阻&#xff08;RDS(ON)&#xff09;为100mΩ&#xff0c;是一款N沟道高压MOS管。ASE40N50SH的最大脉冲正向电流ISM为160A&#xff0c;零栅极电压漏极电流(IDSS)为1uA&#xff0c;其工作时耐温度范围为-55~150摄氏度。ASE40N…...

MySQL基础命令大全——新手必看

Mysql 是一个流行的开源关系型数据库管理系统&#xff0c;广泛用于各种 Web 应用程序和服务器环境中。Mysql 有很多命令可以使用&#xff0c;以下是 Mysql 基础命令&#xff1a; 1、连接到Mysql服务器&#xff1a; mysql -h hostname -u username -p 其中&#xff0c;"ho…...

sklearn学习-朴素贝叶斯(二)

文章目录一、概率类模型的评估指标1、布里尔分数Brier Score对数似然函数Log Loss二、calibration_curve&#xff1a;校准可靠性曲线三、多项式朴素贝叶斯以及其变化四、伯努利朴素贝叶斯五、改进多项式朴素贝叶斯&#xff1a;补集朴素贝叶斯ComplementNB六、文本分类案例TF-ID…...

MySQL_主从复制读写分离

主从复制 概述 主从复制是指将主数据库的DDL和DML操作通过二进制日志传到从库服务器中&#xff0c;然后在从库上对这些日志重新执行&#xff08;也叫重做&#xff09;&#xff0c;从而使得从库和主库的数据保持同步。 MySQL支持一台主库同时向多台从库进行复制&#xff0c;从…...