C++ 中常见的字符串定义方式及其用法

引言
最近在学习C++,下面将从基础到进阶的顺序,列出一些 C++ 中常见的字符串定义方式及其用法,包含完整代码和详细注释,加深对代码的理解。

C 风格字符串(char*或 char[])

  • 定义方式
#include <iostream>int main() {// 字符串字面量(不可修改)const char* str1 = "Hello";// 字符数组(可修改)char str2[] = "World";// 手动初始化字符数组(需留空间给 '\0')char str3[6] = {'H', 'e', 'l', 'l', 'o', '\0'};std::cout << str1 << " " << str2 << " " << str3 << std::endl;return 0;
}// 输出结果:Hello World Hello
  • 特点

    结尾必须是 ‘\0’

    不安全,容易越界或引发未定义行为

    推荐尽量用 std::string 替代

C++ 标准字符串(std::string)

  • 常见定义方式与用法
#include <iostream>
#include <string>int main() {// 定义字符串std::string s1 = "Hello";std::string s2("World");std::string s3 = s1 + ", " + s2 + "!";  // 字符串拼接std::cout << s3 << std::endl;  // 输出:Hello, World!// 字符访问std::cout << "第一个字符:" << s3[0] << std::endl;std::cout << "最后一个字符:" << s3.back() << std::endl;// 长度与清空std::cout << "长度:" << s3.length() << std::endl;s3.clear();std::cout << "是否为空:" << s3.empty() << std::endl;return 0;
}/*
输出结果:
Hello, World!
第一个字符:H
最后一个字符:!
长度:13
是否为空:1
*/

字符串数组或向量

  • 使用 std::vectorstd::string
#include <iostream>
#include <vector>
#include <string>int main() {std::vector<std::string> fruits = {"apple", "banana", "cherry"};// 添加元素fruits.push_back("date");// 遍历for (const std::string& fruit : fruits) {std::cout << fruit << std::endl;}return 0;
}/*
输出结果:
apple
banana
cherry
date
*/
  • 使用 std::array<std::string, N>(定长数组)
#include <iostream>
#include <array>
#include <string>int main() {std::array<std::string, 3> days = {"Monday", "Tuesday", "Wednesday"};for (const auto& day : days) {std::cout << day << std::endl;}  // 使用 auto 自动识别数据类型return 0;
}/*
输出结果:
Monday
Tuesday
Wednesday
*/

字符串处理常用操作

  • 查找和替换
#include <iostream>
#include <string>int main() {std::string text = "I like apples and apples are sweet.";// 查找第一个"apple"size_t pos = text.find("apples");if (pos != std::string::npos) {std::cout << "找到位置:" << pos << std::endl;}// 替换第一个"apples"为"oranges"text.replace(pos, 6, "oranges");std::cout << "替换后:" << text << std::endl;return 0;
}
  • 子串、大小写、比较
#include <iostream>
#include <string>int main() {std::string s = "HelloWorld";// 提取子串std::string sub = s.substr(0, 5);  // "Hello"// 比较if (s == "HelloWorld") {std::cout << "字符串相等" << std::endl;}// 大小写转换(手动方式)for (char& c : s) {c = tolower(c);  // 或者 toupper(c)}std::cout << s << std::endl;return 0;
}

其他容器中的字符串用法

  • std::dequestd::string
#include <iostream>
#include <deque>
#include <string>int main() {std::deque<std::string> queue;queue.push_back("first");queue.push_back("second");queue.push_front("zero");for (const auto& item : queue) {std::cout << item << std::endl;}return 0;
}
  • std::map<std::string, std::string>
#include <iostream>
#include <map>
#include <string>int main() {std::map<std::string, std::string> dict;dict["apple"] = "苹果";dict["banana"] = "香蕉";for (const auto& [eng, chi] : dict) {std::cout << eng << ": " << chi << std::endl;}return 0;
}

字符串与数值转换

#include <iostream>
#include <string>int main() {std::string numStr = "123";int num = std::stoi(numStr);  // string -> intdouble d = std::stod("3.1415");  // string -> doublestd::string s = std::to_string(42);  // int -> stringstd::cout << "整数:" << num << ",浮点数:" << d << ",字符串:" << s << std::endl;return 0;
}

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

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

相关文章

下一代防火墙-防范DOS攻击、IPS防护、web防护实验

一、实验拓扑二、实验设备1.山石网科系列下一代防火墙2.三层交换机一台3.windows两台4.各种工具&#xff0c;如hyenae、小旋风服务器、永恒之蓝等等三、实验目的1.掌握网络攻击防护策略配置2.通过下一代防火墙来防护服务器免受DOS攻击四、防范Dos攻击实验1.将一台windows配置为…

【人工智能】通过 Dify 构建智能助手

通过 Dify 构建智能助手1.定义2.如何使用智能助手3.添加助手需要的工具4.配置 Agent5.配置对话开场白6.添加文件上传7.调试与预览8.应用发布1.定义 智能助手&#xff08;Agent Assistant&#xff09;&#xff0c;利用大语言模型的推理能力&#xff0c;能够自主对复杂的人类任务…

破局与重构:文心大模型开源的产业变革密码

——从技术垄断到生态共享的战略转型深度解析 引言&#xff1a;一场静悄悄的革命 2024年&#xff0c;当百度宣布文心大模型4.5系列全面开源时&#xff0c;这不仅仅是一次技术发布&#xff0c;更是一场关于AI产业未来走向的战略博弈。在全球AI竞争白热化的当下&#xff0c;开源意…

7.15 窗口函数 | 二分 | 位运算

05.071.位运算2.位图class Solution { public:int exchangeBits(int num) {bitset<33> bitNum(num);for (int i 0; i < 16; i){bitNum[32] bitNum[2*i];bitNum[2*i] bitNum[2*i1];bitNum[2*i1] bitNum[32];}return (int)bitNum.to_ulong();} };577.员工奖金select…

Windows 安装配置Claude Code

文章目录1.安装node.js2.安装 Claude Code3.测试claude1.安装node.js https://nodejs.org/en/download/ 一路回车即可顺利安装完成。 再键盘按下Win R快捷键&#xff0c;输入cmd&#xff0c;然后回车启动命令行窗口。分别输入node -v和npm -v来查看node.js版本和npm版本。 环…

C++动态数组vector

一、为什么要用vector而不是数组 虽有嘉肴&#xff0c;弗食&#xff0c;不知其旨也。______,____,____________。 简单来说就是节约内存&#xff0c;不容易RE 二、如何使用vector 既谓之数组&#xff0c;则用之如数组 1.定义 vector<数据类型>名称 vector<int …

14.使用GoogleNet/Inception网络进行Fashion-Mnist分类

14.1 GoogleNet网络结构设计import torch from torch import nn from torch.nn import functional as F from torchsummary import summary class Inception(nn.Module):def __init__(self, in_channels,c1,c2,c3,c4,**kwargs):super(Inception,self).__init__(**kwargs)#第一条…

NE综合实验2:RIP 与 OSPF 动态路由精细配置、FTPTELNET 服务搭建及精准访问限制

NE综合实验2&#xff1a;RIP 与 OSPF 动态路由精细配置、FTPTELNET 服务搭建及精准访问限制 涉及的协议可以看我之前的文章&#xff1a; RIP实验 OSPF协议&#xff1a;核心概念与配置要点解析 ACL协议&#xff1a;核心概念与配置要点解析 基于OSPF动态路由与ACL访问控制的网…

Android 插件化实现原理详解

Android 插件化实现原理详解 插件化技术是Android开发中一项重要的高级技术&#xff0c;它允许应用动态加载和执行未安装的APK模块。以下是插件化技术的核心实现原理和关键技术点&#xff1a; 一、插件化核心思想宿主与插件&#xff1a; 宿主(Host)&#xff1a;主应用APK&#…

空间智能-李飞飞团队工作总结(至2025.07)

李飞飞团队在空间智能(Spatial Intelligence)领域的研究自2024年起取得了一系列突破性进展,其里程碑成果可归纳为以下核心方向: 一、理论框架提出与定义(2024年) 1、空间智能概念系统化 a.定义: 李飞飞首次明确空间智能为“机器在3D空间和时间中感知、推理和行动的能…

【算法深练】BFS:“由近及远”的遍历艺术,广度优先算法题型全解析

前言 宽度优先遍历BFS与深度优先遍历DFS有本质上的区别&#xff0c;DFS是一直扩到低之后找返回&#xff0c;而BFS是一层层的扩展就像剥洋葱皮一样。 通常BFS是将所有路径同时进行尝试&#xff0c;所以BFS找到的第一个满足条件的位置&#xff0c;一定是路径最短的位置&#xf…

ZW3D 二次开发-创建球体

使用中望3d用户函数 cvxPartSphere 创建球体 函数定义: ZW_API_C evxErrors cvxPartSphere(svxSphereData *Sphere, int *idShape); typedef struct svxSphereData {evxBoolType Combine; /**<@brief combination method */svxPoint Center; /**<@brief sphere ce…

艺术总监的构图“再造术”:用PS生成式AI,重塑照片叙事框架

在视觉叙事中&#xff0c;我们常常面临一个核心的“对立统一”&#xff1a;一方面是**“被捕捉的瞬间”&#xff08;The Captured Moment&#xff09;&#xff0c;即摄影师在特定时间、特定地点所记录下的客观现实&#xff1b;另一方面是“被期望的叙事”**&#xff08;The Des…

ChatGPT无法登陆?分步排查指南与解决方案

ChatGPT作为全球领先的AI对话工具&#xff0c;日均处理超百万次登录请求&#xff0c;登陆问题可能导致用户无法正常使用服务&#xff0c;影响工作效率或学习进度。 无论是显示「网络错误」「账号未激活」&#xff0c;还是持续加载无响应&#xff0c;本文将从网络连接、账号状态…

用Joern执行CPGQL找到C语言中不安全函数调用的流程

1. 引入 静态应用程序安全测试&#xff08;Static application security testing&#xff09;简称SAST&#xff0c;是透过审查程式源代码来识别漏洞&#xff0c;提升软件安全性的作法。 Joern 是一个强大的开源静态应用安全测试&#xff08;SAST&#xff09;工具&#xff0c;专…

读文章 Critiques of World model

论文名称&#xff1a;对世界模型的批判 作者单位&#xff1a; CMU&#xff0c; UC SD 原文链接&#xff1a;https://arxiv.org/pdf/2507.05169 摘要&#xff1a; 世界模型&#xff08;World Model&#xff09;——即真实世界环境的算法替代物&#xff0c;是生物体所体验并与之…

利用docker部署前后端分离项目

后端部署数据库:redis部署:拉取镜像:doker pull redis运行容器:docker run -d -p 6379:6379 --name my_redis redismysql部署:拉取镜像:docker pull mysql运行容器:我这里3306被占了就用的39001映射docker run -d -p 39001:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /hom…

YOLOv11调参指南

YOLOv11调参 1. YOLOv11参数体系概述 YOLOv11作为目标检测领域的前沿算法&#xff0c;其参数体系可分为四大核心模块&#xff1a; 模型结构参数&#xff1a;决定网络深度、宽度、特征融合方式训练参数&#xff1a;控制学习率、优化器、数据增强策略检测参数&#xff1a;影响预测…

云原生核心技术解析:Docker vs Kubernetes vs Docker Compose

云原生核心技术解析&#xff1a;Docker vs Kubernetes vs Docker Compose &#x1f6a2;☸️⚙️ 一、云原生核心概念 ☁️ 云原生&#xff08;Cloud Native&#xff09; 是一种基于云计算模型构建和运行应用的方法论&#xff0c;核心目标是通过以下技术实现弹性、可扩展、高可…

keepalive模拟操作部署

目录 keepalived双机热备 一、配置准备 二、配置双机热备&#xff08;基于nginx&#xff09; web1端 修改配置文件 配置脚本文件 web2端 修改配置文件 配置脚本文件 模拟检测 开启keepalived服务 访问结果 故障模拟 中止nginx 查看IP 访问浏览器 重启服务后…