C++ 字符串补充(一)

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.mfbz.cn/a/607691.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C语言【文件操作 2】

文章目录 前言顺序读写函数的介绍fputc && fgetcfputcfgetc fputs && fgetsfputsfgets fprintf && fscanffprintffscanf fwrite && freadfwritefread 文件的随机读写fseek函数偏移量ftell函数rewind函数 文件的结束判断被错误使用的feof 结语 …

鸿蒙开发接口Ability框架:【(StaticSubscriberExtensionAbility)】

StaticSubscriberExtensionAbility StaticSubscriberExtensionAbility模块提供静态订阅者扩展能力的类别的能力。 说明&#xff1a; 本模块首批接口从API version 9 开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 本模块接口仅可在Stage模型下…

多线程学习D10 收尾了应该

线程安全集合类概述 重点介绍java.util.concurrent.* 下的线程安全集合类&#xff0c;可以发现它们有规律&#xff0c;里面包含三类关键词&#xff1a;Blocking、CopyOnWrite、Concurrent Blocking 大部分实现基于锁&#xff0c;并提供用来阻塞的方法 CopyOnWrite 之类容器修改…

iOS 17 / iPad OS 17屏蔽更新

iOS 17 / iPad OS 17屏蔽更新 1&#xff0c;进入屏蔽iOS更新的描述文件下载链接 下载链接 wx 搜索 Geek 前端发送屏蔽更新进行获取 2&#xff0c;复制这段链接&#xff0c;在Safari浏览器中打开&#xff0c;注意打开后别点击下载&#xff01;要先改时间&#xff01; 3&#…

69、oak和华为atlas 200dk A2进行编解码测试

基本思想:将oak深度相机与atlas 200dk A2进行结合,测试其dvpp的编解码能力 cmakelist.txt cmake_minimum_required(VERSION 3.16) project(untitled10) set(CMAKE_CXX_FLAGS "-std=c++11") set(CMAKE_CXX_STANDARD 11) add_definitions(-DENABLE_DVPP_INTERFACE)i…

数据的输入和输出

早期的总线系统 为了解决通信的问题、主板上铺设了一条公共线路、各个设备都连接到这条线路上、不管谁要和谁通信、都能使用它来传输、这条线路就是总线。 总线上有CPU、内存、鼠标、键盘、硬盘、网卡、声卡、显卡等… 说是一条总线、实际上是包含了传输数据的数据总线、传输…

保研面试408复习 4——操作系统、计网

文章目录 1、操作系统一、文件系统中文件是如何组织的&#xff1f;二、文件的整体概述三、UNIX外存空闲空间管理 2、计算机网络一、CSMA/CD 协议&#xff08;数据链路层协议&#xff09;二、以太网MAC帧MTU 标记文字记忆&#xff0c;加粗文字注意&#xff0c;普通文字理解。 1、…

「C++ 内存管理篇 00」指针

目录 一、变量&#xff0c;变量名和指针 1. 什么是变量&#xff1f; 2. 变量名和指针 3. 使用指针获取数据 二、指针变量和数组变量 三、编译器对指针的等级有着严格的检查 四、指针的加减 1. 存放指针的变量的加减 2. 存放指针的变量的自增自减 3. 两个指针相减 一、变量&…

融知财经:期货交易的规则和操作方法

期货交易是指在未来的某一特定时期&#xff0c;买卖双方通过签订合约的方式&#xff0c;约定以某种价格买卖一定数量的某种商品或资产的行为。期货交易的规则和操作方法如下&#xff1a; 期货交易的规则和操作方法 1、双向交易&#xff1a; 期货市场允许投资者进行多头&#xf…

数据结构_栈和队列(Stack Queue)

✨✨所属专栏&#xff1a;数据结构✨✨ ✨✨作者主页&#xff1a;嶔某✨✨ 栈&#xff1a; 代码&#xff1a;function/数据结构_栈/stack.c 钦某/c-language-learning - 码云 - 开源中国 (gitee.com)https://gitee.com/wang-qin928/c-language-learning/blob/master/function/…

实战教程:个性化生鲜超市小程序制作与运营全解析

生鲜电商行业一直以来都备受关注&#xff0c;而如今&#xff0c;小程序商城成为了这个行业的新潮流。乔拓云平台提供了一个便捷的平台&#xff0c;让我们可以轻松地进入商城后台管理页面。 浏览器搜索【乔拓云】并登陆平台后&#xff0c;我们可以点击【小程序商城】模块&#x…

Redis学习汇总

目录 1.Linux环境下安装redis 2.redis的数据结构及命令 3.redis.conf配置文件常用配置 3.redis的事务操作 4.redis实现乐观锁 5.通过jedis操作redis 6.Springboot集成redis 7.自定义一个RedisTemplate 8.持久化策略 RDB和AOF 9.redis集群环境搭建 10.哨兵模式 11.缓…

Langchain实战

感谢阅读 LangChain介绍百度文心API申请申请百度智能云创建应用 LLMChain demo以及伪幻觉问题多轮对话的实现Sequential ChainsSimpleSequentialChainSequentialChainRouter Chain Documents ChainStuffDocumentsChainRefineDocumentsChainMapReduceDocumentsChainMapRerankDoc…

第09章 局域网技术(拓扑结构设计+FDDI工作机制)

9.1 本章目标 了解IEEE 802局域网标准掌握局域网拓扑结构了解10Base以太网了解快速以太网熟悉交换式以太网了解千兆位以太网了解其它种类的局域网局域网中的常用技术 9.2 局域网概述 罗伯特梅特卡夫个人简介 罗伯特梅特卡夫&#xff08;Robert Metcalfe&#xff0c;1…

第五节课《LMDeploy 量化部署 LLM 实践》

LMDeploy 量化部署 LLM-VLM 实践_哔哩哔哩_bilibili PDF链接&#xff1a;https://pan.baidu.com/s/1JFtvBWgEGFWJq8pHafvIUg?pwd6666 提取码&#xff1a;6666 https://github.com/InternLM/Tutorial/blob/camp2/lmdeploy/README.md 一、大模型部署背景 RAG范式开发大模型…

neo4j-5.11.0安装APOC插件or配置允许使用过程的权限

在已经安装好neo4j和jdk的情况下安装apoc组件&#xff0c;之前使用neo4j-community-4.4.30&#xff0c;可以找到配置apoc-4.4.0.22-all.jar&#xff0c;但是高版本neo4j对应没有apoc-X.X.X-all.jar。解决如下所示&#xff1a; 1.安装好JDK与neo4j 已经安装对应版本的JDK 17.0…

ABAP 第二代增强-采购申请子屏幕增强

文章目录 第二代增强-采购申请子屏幕增强需求实现过程创建项目运行效果客户屏幕的PBO全局变量获取数据更新数据运行效果查询底表修改数据 第二代增强-采购申请子屏幕增强 需求 实现过程 创建项目 运行效果 客户屏幕的PBO 全局变量 *&------------------------------------…

点击短信链接唤起Android App实战

一.概述 在很多业务场景中,需要点击短信链接跳转到App的指定页面。在Android系统中,想要实现这个功能,可以通过DeepLink或AppLink实现。二.方案 2.1 DeepLink 2.1.1 方案效果 DeepLink是Android系统最基础、最普遍、最广泛的外部唤起App的方式,不受系统版本限制。当用户…

《21天学通C++》(第二十章)STL映射类(map和multimap)

为什么需要map和multimap&#xff1a; 1.查找高效&#xff1a; 映射类允许通过键快速查找对应的值&#xff0c;这对于需要频繁查找特定元素的场景非常适合。 2.自动排序&#xff1a; 会自动根据键的顺序对元素进行排序 3.多级映射&#xff1a; 映射类可以嵌套使用&#xff0c;创…

typescript类型基础

typescript类型基础 枚举类型 enum Season {Spring,Summer,Fall,Winter }数值型枚举 enum Direction {Up,Down,Left,Right } const direction:Direction Direction.up每个数值型枚举成员都表示一个具体的数字&#xff0c;如果在定义一个枚举的时候没有设置枚举成员的值&…
最新文章