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
英文地址,請注明出處:http://en.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 訪問瀏覽器 重啟服務后…