C++ 字符串补充

server/2024/9/22 19:38:29/

1、string类型和const char *类型

const char类型是C语言中用来表示字符串的一种数据类型,通常以字符数组的形式表示,以空字符'\0'结尾。而string类型是C++中的标准库中提供的字符串类,是一个封装了char数组的字符串对象,可以动态地改变大小,并提供了许多字符串操作的方法。在使用上,const char类型需要手动管理内存,而string类型则由类自动管理内存,更加方便和安全。如果你在C++中进行字符串操作,推荐使用string类型。

2、C++中默认的字符串类型

在C++中,如果函数参数写了字符串,默认是const char*类型,而不是string类型。如果想要传递string类型的字符串作为函数参数,可以将字符串转换为string类型再传递。

例如:将两个字符串进行大小对比。

template<typename T>
T maxNum(T a,T b){cout<<"使用通用函数模板:";if(a > b){return a;}else{return b;}
}
template<>
string maxNum<string>(string a,string b)//比较字符串长度
{cout<<"使用(string)函数模板特化:";if(a > b){return a;}else{return b;}
}
int main()
{string str1 = "Hello";string str2 = "World";string num3 = maxNum(str1,str2);cout<<"num3 = "<<num3<<endl;string num4 = maxNum("Hello","World");cout<<"num4 = "<<num4<<endl;return 0;
}

如果使用上述特化模板函数,直接将字符串当形参输入,最后输出还是通用 模板函数

运行结果:

使用(string)函数模板特化:num3 = World
使用通用函数模板:num4 = World

要修改这个问题,需要重新写一个 const char*类型的特化函数模板。

template<>
const char *maxNum<const char *>(const char *a,const char *b)
{cout<<"使用(const char*)函数模板特化:";if(a > b){return a;}else{return b;}
}

运行结果:

使用(string)函数模板特化:num3 = World
使用(const char*)函数模板特化:num4 = World

 3、字符串长度

使用<string>库,使用length()函数

代码示例:

string compare(){           return a.length()>b.length()?a:b;
}

4、字符串拼接

使用<cstring>库,使用strcat()函数

代码示例:

strcat(newStr,other.str);//将other.str字符串拼接到newStr字符串末尾

5、字符串赋值

 使用<cstring>库,使用strcpy()函数

注:字符串无法通过“=”赋值运算符直接赋值,只能通过复制的方法,将一个字符串中的内容复制到对应的字符串中。

代码示例:

strcpy(str,s);//将字符数组s中的值赋值到str中

6、字符串大小对比

比较两个字符串是否相等。

 使用<cstring>库,使用strcmp()函数

注:如果两个字符串相等(每个字符都一样),输出为0

代码示例:

if(strcmp(other.str,this->str) == 0)//如果other.str和str字符串相等输出True
{return true;
}

注: 在C++中,字符串是以字符数组的形式存储的,如果直接使用">"和"<"进行比较,实际上比较的是字符串在内存中的地址,并不是比较字符串的大小。

如果要比较两个字符串大小,可以使用compare()方法,使用<string>库

代码示例:

#include <iostream>
#include <string>int main() {std::string str1 = "hello";std::string str2 = "world";if (str1.compare(str2) > 0) {std::cout << "str1 大于 str2" << std::endl;} else if (str1.compare(str2) < 0) {std::cout << "str1 小于 str2" << std::endl;} else {std::cout << "str1 等于 str2" << std::endl;}return 0;
}

运行结果

str1 小于 str2


http://www.ppmy.cn/server/34233.html

相关文章

MySql#MySql安装和配置

目录 一、卸载不需要的环境 二、安装mysql yum 源 三、开始安装 四、如果保证安装成功呢&#xff1f; 五、MySql 启动&#xff01; 六、登录mysql 七、配置文件说明 八、设置开机启动&#xff01; 本次安装是在Linux环境在centos7中完成 首先先将自己切换成root 一、…

【系统架构师】-选择题(十三)

1、在某企业的营销管理系统设计阶段&#xff0c;属性"员工"在考勤管理子系统中被称为"员工"&#xff0c;而在档案管理子系统中被称为"职工"&#xff0c;这类冲突称为&#xff08; 命名冲突&#xff09;。 同一个实体在同系统中存在不同的命名&am…

目标检测正负样本区分和平衡

1、正负样本定义 rpn和rcnn的正负样本定义都是基于MaxIoUAssigner&#xff0c;只不过定义阈值不一样而已。 MaxIoUAssigner的操作包括4个步骤&#xff1a; 首先初始化时候假设每个anchor的mask都是-1&#xff0c;表示都是忽略anchor 将每个anchor和所有gt的iou的最大Iou小于…

leetcode 1235

leetcode 1235 代码 class Solution { public:int jobScheduling(vector<int>& startTime, vector<int>& endTime, vector<int>& profit) {int n startTime.size();vector<vector<int>> jobs(n);for(int i0; i<n; i){jobs[i] …

python的scapy库基础使用

scapy库 一.概述 Scapy是一个功能强大且灵活的Python库&#xff0c;用于操作和探索计算机网络中的数据包。它允许用户构建各种类型的网络数据包&#xff0c;并支持多种网络协议&#xff0c;如TCP、UDP、ICMP、ARP等。Scapy不仅可以发送和接收数据包&#xff0c;还可以捕获、修…

ApacheCordova 12 +Vs 2022 项目搭建教程_开发环境搭建教程

一、安装 cordova cli 并使用命令创建项目 npm install –g cordova 详细参考: Apache Cordova开发环境搭建(二)VS Code_天马3798-CSDN博客_cordova vscode 二、 Vs 2022 Android 开发搭建+调试 .Net MAUI 搭建Android 开发环境-CSDN博客 三、配置 JDK 环境变量、配置…

NPM 基础

介绍 npm 是 JavaScript 编程语言的一个包管理器&#xff0c;它允许开发者安装、共享和管理依赖项。npm 与 Node.js 紧密集成&#xff0c;是 Node.js 生态系统中不可或缺的一部分。它提供了一个命令行工具&#xff0c;使得开发者能够轻松地安装、配置和管理项目所需的各种包。…

【SpringBoot】数据脱敏

文章目录 什么是数据脱敏JsonSerialize自定义Jackson注解定制脱敏策略定制JSON序列化实现脱敏工具类 定义Person类&#xff0c;对其数据脱敏模拟接口测试总结 什么是数据脱敏 数据脱敏&#xff0c;也称为数据的去隐私化或数据变形&#xff0c;是一种技术手段&#xff0c;用于对…