日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

【C++ 语言】C++字符串 ( string 类 | 创建方法 | 控制台输出 | 字符串操作 | 栈内存字符串对象 | string* )

發布時間:2025/6/17 c/c++ 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【C++ 语言】C++字符串 ( string 类 | 创建方法 | 控制台输出 | 字符串操作 | 栈内存字符串对象 | string* ) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

        • C++ 字符串 對象
        • C++ 字符串 對象 創建方法
        • C++ 字符串 對象 輸出到控制臺
        • C++ 字符串 拼接
        • C++ 字符串 方法調用 ( 棧內存對象 )
        • C++ 字符串 方法調用 ( 堆內存對象 )
        • C / C++ 字符串 完整代碼示例



C++ 字符串 對象


C++ 字符串 :

  • 1.string 類 : C++ 中的字符串是 string 類 對象 ;
  • 2.string 類定義位置 : 該 string 類定義在 iostream 頭文件中 , 不必引入另外的頭文件 ;
#include <iostream>


C++ 字符串 對象 創建方法


C++ 字符串 對象 創建方法 :

  • 1.直接賦值 : 直接使用 C 字符串賦值 ;
//① 使用字符串賦值string string_c_plus_1 = " Hello ";
  • 2.構造方法 : 調用 string 構造方法 創建 string 對象 ;
    • ① 傳入 string 參數 : string 構造方法可以傳入 string 對象 ;
    • ② 傳入 C 字符串參數 : string 構造方法也可以傳入 一個 C 字符串 ;
//② 調用構造方法 初始化字符串string string_c_plus_2(string_c_plus_1);string string_c_plus_3(" World ");
  • 3.使用 new 分配內存 : 使用 new 為 String 對象分配一塊堆內存空間 , 返回 string * 類型的指針 ;
//③ 使用 new 申請的內存 , 需要使用 delete 釋放string *string_c_plus_4 = new string(" New ");delete string_c_plus_4;

調用該 string* 對象的方法需要使用 -> 進行調用 ;

堆內存使用原則 :
① 使用 new 申請的內存 , 需要使用 delete 釋放 ;
② 使用 new [] 申請的數組 , 需要使用 delete[] 釋放 ;
③ 使用 malloc 申請的內存 , 需要使用 free 釋放 ;




C++ 字符串 對象 輸出到控制臺


C++ 字符串 對象 輸出到控制臺 :

  • 1.不能直接使用 cout 輸出 : 下面的用法是錯誤的 ; 使用 cout 不能直接將 string 對象輸出 ;
//這種用法是錯誤的string string_c_plus_1 = " Hello ";cout << string_c_plus_1 << endl;
  • 2.輸出方法 : 需要將 string 對象轉成 C 字符串 , 然后再輸出 :
//調用 string 對象的 c_str() 方法 , 獲取其 C 字符串 , 然后再輸出到控制臺string string_c_plus_1 = " Hello ";cout << string_c_plus_2.c_str() << endl;

在 Java 中輸出 String 對象 , 默認會調用其 toString 方法 , 但是在 C 中不可以直接使用 ;




C++ 字符串 拼接


C++ 字符串拼接 :

  • 1.使用 “+” 符號拼接 : 這里的加號進行了操作符重載 , 字符串之間相加代表了字符串的拼接操作 ;
//① "+" : 操作符重載 , 重新定義了 加號運算符的行為 , // 這里加號可以實現字符串拼接 , 與 Java 類似string string_c_plus_5 = string_c_plus_1 + string_c_plus_3;
  • 2.調用 string 對象的 append 方法 : 調用 string 對象的 append() 方法 , 傳入要拼接的字符串 ;
//② 調用 string 對象的 append 方法 , 拼接字符串string string_c_plus_6 = string_c_plus_1.append( string_c_plus_3 );
  • 3.代碼示例 :
//C++ 字符串拼接//① "+" : 操作符重載 , 重新定義了 加號運算符的行為 , 這里加號可以實現字符串拼接 , 與 Java 類似//② 調用 string 對象的 append 方法 , 拼接字符串string string_c_plus_5 = string_c_plus_1 + string_c_plus_3;string string_c_plus_6 = string_c_plus_1.append( string_c_plus_3 );
  • 4.運行結果 :
Hello WorldHello World

操作符重載 : 重新定義了操作符的作用 , 這里的 “+” 就是重新定義了其作用 , 拼接字符串 ;




C++ 字符串 方法調用 ( 棧內存對象 )


C++ 字符串 方法調用 : 該字符串 ( string ) 對象 在棧內存中 ;

  • 1.獲取字符串長度 : 調用 string 對象的 size() 方法 , 即可返回字符串長度 ;
//① 使用字符串賦值string string_c_plus_1 = " Hello ";//獲取 C++ 字符串長度 : 調用 string 對象的 size() 方法 , 獲取字符串長度int string_c_plus_1_size = string_c_plus_1.size();
  • 2.判斷字符串是否為空 : 調用 string 對象的 empty() 方法 , 判斷字符串是否為空 ;
//① 使用字符串賦值string string_c_plus_1 = " Hello ";//判斷 C++ 字符串是否為空 : 調用 string 對象的 empty() 方法 ; bool string_c_plus_1_empty = string_c_plus_1.empty();
  • 3.代碼示例 :
//使用字符串賦值string string_c_plus_1 = " Hello ";//獲取 C++ 字符串長度 : 調用 string 對象的 size() 方法 , 獲取字符串長度int string_c_plus_1_size = string_c_plus_1.size();cout << "string_c_plus_1_size : " << string_c_plus_1_size << endl;//判斷 C++ 字符串是否為空 : 調用 string 對象的 empty() 方法 ; bool string_c_plus_1_empty = string_c_plus_1.empty();cout << "string_c_plus_1_empty : " << string_c_plus_1_empty << endl;
  • 4.運行結果 :
string_c_plus_1_size : 14 string_c_plus_1_empty : 0

使用 “.” 方式調用棧內存對象的方法 ;




C++ 字符串 方法調用 ( 堆內存對象 )


C++ 字符串 堆內存對象 方法調用 :

  • 1.堆內存對象創建 : 使用 new 創建的 string 對象 需要在堆內存中為其分配內存 , 返回的是 string* 指針類型 ;
//使用 new 創建的對象 , 就不能使用 . 訪問其方法和變量 , 需要使用 -> 符號進行訪問 // -> 相當于 (*). 運算, 先讀取指針內容 , 然后訪問其方法或變量string* string_c_plus_7 = new string(" New String ");
  • 1.獲取字符串長度 : 調用 string 對象的 size() 方法 , 即可返回字符串長度 ; 需要使用 -> 代替 . 操作 ;
//① 獲取字符串長度 : int string_c_plus_7_size = string_c_plus_7->size();
  • 2.判斷字符串是否為空 : 調用 string 對象的 empty() 方法 , 判斷字符串是否為空 ; 需要使用 -> 代替 . 操作 ;
//② 判斷字符串是否為空 : bool string_c_plus_7_empty = string_c_plus_7->empty();
  • 3.使用指針的好處 :
    • ① 擴大作用域 : 如果在棧內存中使用 , 有作用域限制 , 出了棧內存 作用域 , 該對象就無效了 ;
    • ② 方便參數傳遞 : 指針 大小為 4 ( 32 位系統 ) 或 8 ( 64 位系統 ) 個字節 , 其當做參數傳遞 比直接傳遞對象 ( 動輒幾十上百字節甚至更高 ) 效率更高 ;
  • 4.代碼示例 :
//使用 new 創建的對象 , 就不能使用 . 訪問其方法和變量 , 需要使用 -> 符號進行訪問 // -> 相當于 (*). 運算, 先讀取指針內容 , 然后訪問其方法或變量string* string_c_plus_7 = new string(" New String ");//① 獲取字符串長度 : int string_c_plus_7_size = string_c_plus_7->size();cout << "string_c_plus_7 : " << string_c_plus_7_size << endl;//② 判斷字符串是否為空 : bool string_c_plus_7_empty = string_c_plus_7->empty();cout << "string_c_plus_7_empty : " << string_c_plus_7_empty << endl;//釋放堆內存delete string_c_plus_7;//使用指針的好處 : // ① 如果在棧內存中使用 , 有作用域限制 , 出了棧內存 作用域 , 該對象就無效了 ; // ② 指針 大小為 4 ( 32 位系統 ) 或 8 ( 64 位系統 ) 個字節 , // 其當做參數傳遞 比直接傳遞對象 ( 動輒幾十上百字節甚至更高 ) 效率更高
  • 5.運行結果 :
string_c_plus_7 : 12 string_c_plus_7_empty : 0




C / C++ 字符串 完整代碼示例


// 001_CMake_1.cpp: 定義應用程序的入口點。 //#include "001_CMake_1.h" #include "c_extern.h"using namespace std;//定義方法接收 int& 引用類型變量 //并在方法中修改該變量的值 void quote(int& b) {b = 888; }int main() {cout << "Hello CMake。" << endl;//1. C C++ 兼容//博客地址 : https://hanshuliang.blog.csdn.net/article/details/98840708//調用 c_extern.h 頭文件中定義的方法//該方法定義在了 C 語言文件中add(1, 2);//2. 引用數據類型//博客地址 : https://hanshuliang.blog.csdn.net/article/details/99239635//代碼 展示 流程 : //① 定義 普通 類型 變量int a = 8;//② 定義 引用類型變量, 格式 : 類型名稱& 變量名 = 對應類型變量名稱 ;int& b = a;//③ 調用函數傳入引用類型參數 : 將引用類型傳給接收引用類型的方法quote(b);//④ 打印引用數據類型的修改結果 , 結果是 b 被修改成了 888cout << b << endl;//引用數據類型定義與使用 : // ① 引用數據類型定義 : 類型名稱& 變量名 = 對應類型變量名稱 ;// ② 引用數據類型的使用方法 : 直接當做原來的變量使用即可, 可以替換原來變量的位置使用//引用類型解析 : // ① int& 是引用數據類型 , b 是 a 的引用 // ② 分配一塊內存存放 int 類型數據 8 , 將該內存賦予一個別名 a// ③ 同時又給該內存賦予另外一個別名 b //3. 字符串使用//C 字符串 表示方法 : // ① 字符數組 : 本質是 字符 數組 char[] , 這里注意字符數組要以 NULL 或 '\0' 結尾; char string_c[] = { 'h', 'e', 'l', 'l', 'o', '\0' };// ② 指針 : 使用指針形式表示字符串 , 默認末尾增加 '\0' ;char* string_c_p = "hello";//字符串打印 : // ① 打印字符串 , cout 后的 << 后可以打印 字符串 , 也可以打印變量// ② 輸出 cout << 字符串或變量1 << 字符串或變量2 ... << endl 可以拼接 輸出信息cout << "string_c : " << string_c << endl;cout << "string_c_p : " << string_c_p << endl;//C 語言中的字符串操作//拷貝字符串 char string_c_copy_destination[6];char string_c_copy_source[] = { 'h', 'e', 'l', 'l', 'o', '\0' };// ① 參數 : strcpy 方法是拷貝字符串的方法 , 第一個參數是目標字符串 , 第二個參數是源字符串// ② 作用 : 該方法是將 源字符串 拷貝到 目標字符串中strcpy(string_c_copy_destination, string_c_copy_source);// ③ 打印拷貝結果 : cout << "string_c_copy_destination : " << string_c_copy_destination << endl;//拼接字符串 //① 定義目標字符串 : 拼接字符串的目標字符串的大小一定要大于等于要拼接的兩個字符串大小之和, 否則會報錯char string_c_cat_destination[30] = " cat dst ";char string_c_cat_source[] = " cat src ";//② 拼接字符串方法參數 : 第一個參數是目標字符串 , 第二個參數是源字符串//③ 目標字符串大小 : 注意 目標字符串的 大小一定要大于 兩個字符串實際大小strcat(string_c_cat_destination, string_c_cat_source);//④ 打印字符串拼接結果 : cout << "string_c_cat_destination : " << string_c_cat_destination << endl;//獲取字符串長度//① 參數 : 傳入要獲取的字符串 , 該長度不含 '\0' 結尾標志//② 作用 : 獲取實際的字符串長度 , 即自動識別 '\0' 位置 , 獲取其長度 , 與所占用的內存大小無關char string_c_len[] = { 'h', 'e', 'l', 'l', 'o', '\0' };char string_c_len2[20] = { 'h', 'e', 'l', 'l', 'o', '\0' };char * string_c_len3 = "hello";//① 字符數組長度 , 測量從開始到 '\0' 的長度, 不包括 '\0'int len1 = strlen(string_c_len);//② 指定大小的字符數組長度 , 結果不是指定的大小的值 , 獲取的是實際字符串長度int len2 = strlen(string_c_len2);//③ 指針表示的字符串 , 其獲取的大小是實際字符串大小, 不包含自動添加的 '\0' int len3 = strlen(string_c_len3);//④ 打印 三個字符串大小cout << "len1 : " << len1<< " len2 : " << len2<< " len3 : " << len3<< endl;//字符串比較// ① 參數說明 : 參數是需要比較的兩個字符串 , 第一個參數 str1 , 第二個參數 str2// ② 對比規則 : str1 和 str2 兩個字符串 , 從左到右 逐個對比 ASCII 碼 大小 ; // a. 如果 str1 等于 str2 , 返回 0; // b. 如果 str1 > str2 , 返回值 大于 0 ;// c. 如果 str1 < str2 , 返回值 小于 0 ;//定義需要比較的字符串char* string_c_comp_1 = "Hello";char* string_c_comp_2 = "Hello";char* string_c_comp_3 = "hello";// ① 兩個字符串相等int cmp_result_1_2 = strcmp(string_c_comp_1, string_c_comp_2);// ② "Hello" 字符串 (H 對應 ASCII 72) 小于 "hello" 字符串 (h 對應 ASCII 104) , 返回值 小于 0int cmp_result_1_3 = strcmp(string_c_comp_1, string_c_comp_3);// ③ "hello" 字符串 (h 對應 ASCII 104) 大于 "Hello" 字符串 (H 對應 ASCII 72) , 返回值 大于 0int cmp_result_3_1 = strcmp(string_c_comp_3, string_c_comp_1);//輸出字符串對比結果cout << "cmp_result_1_2 : " << cmp_result_1_2 << " cmp_result_1_3 : " << cmp_result_1_3<< " cmp_result_3_1 : " << cmp_result_3_1<< endl;// C++ string 類 : 該類定義在 iostream 頭文件中//創建 string 類型對象有三種方法 : //① 直接使用字符串賦值 //② 調用構造方法賦值 //③ 最后可以調用 new 為字符串分配一塊內存//① 使用字符串賦值string string_c_plus_1 = " Hello ";//② 調用構造方法 初始化字符串string string_c_plus_2(string_c_plus_1);string string_c_plus_3(" World ");//上面的三種字符串不需要釋放 , 因為其定義在棧內存中 , 下面使用 new 創建字符串的情況需要 delete 釋放內存 ; //③ 使用 new 申請的內存 , 需要使用 delete 釋放string *string_c_plus_4 = new string(" New ");delete string_c_plus_4;//使用 new [] 申請的數組 , 需要使用 delete[] 釋放//使用 malloc 申請的內存 , 需要使用 free 釋放//C++ 字符串輸出//字符串對象不能直接在 cout 中輸出, cout << string string_c_plus_5 << endl; 是錯誤的//cout << string_c_plus_2 << endl;//要將 string 對象打印到控制臺上, 需要將其轉為 C 字符串 , char* 或 char[] 才能輸出cout << string_c_plus_1.c_str() << endl;//C++ 字符串拼接//① "+" : 操作符重載 , 重新定義了 加號運算符的行為 , 這里加號可以實現字符串拼接 , 與 Java 類似//② 調用 string 對象的 append 方法 , 拼接字符串string string_c_plus_5 = string_c_plus_1 + string_c_plus_3;string string_c_plus_6 = string_c_plus_1.append( string_c_plus_3 );//輸出拼接的字符串cout << string_c_plus_5.c_str() << endl;cout << string_c_plus_6.c_str() << endl;//獲取 C++ 字符串長度 : 調用 string 對象的 size() 方法 , 獲取字符串長度int string_c_plus_1_size = string_c_plus_1.size();cout << "string_c_plus_1_size : " << string_c_plus_1_size << endl;//判斷 C++ 字符串是否為空 : 調用 string 對象的 empty() 方法 ; bool string_c_plus_1_empty = string_c_plus_1.empty();cout << "string_c_plus_1_empty : " << string_c_plus_1_empty << endl;//使用 new 創建的對象 , 就不能使用 . 訪問其方法和變量 , 需要使用 -> 符號進行訪問 // -> 相當于 (*). 運算, 先讀取指針內容 , 然后訪問其方法或變量string* string_c_plus_7 = new string(" New String ");//① 獲取字符串長度 : int string_c_plus_7_size = string_c_plus_7->size();cout << "string_c_plus_7 : " << string_c_plus_7_size << endl;//② 判斷字符串是否為空 : bool string_c_plus_7_empty = string_c_plus_7->empty();cout << "string_c_plus_7_empty : " << string_c_plus_7_empty << endl;//釋放堆內存delete string_c_plus_7;//使用指針的好處 : // ① 如果在棧內存中使用 , 有作用域限制 , 出了棧內存 作用域 , 該對象就無效了 ; // ② 指針 大小為 4 ( 32 位系統 ) 或 8 ( 64 位系統 ) 個字節 , // 其當做參數傳遞 比直接傳遞對象 ( 動輒幾十上百字節甚至更高 ) 效率更高 return 0; }

總結

以上是生活随笔為你收集整理的【C++ 语言】C++字符串 ( string 类 | 创建方法 | 控制台输出 | 字符串操作 | 栈内存字符串对象 | string* )的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 青草视频网 | 成人美女毛片 | 国产毛片精品 | 国内自拍2020 | 一级黄色片a | 亚洲精品成人a | 岛国大片在线观看 | 黄色网战入口 | 先锋av资源网站 | 老熟女一区二区三区 | 国模无码视频一区 | 毛片久久久久 | 爽爽窝窝午夜精品一区二区 | 日韩av图片 | 美女网站在线看 | аⅴ资源天堂资源库在线 | 秋霞午夜伦理 | 欧美亚洲另类图片 | 一级特黄特色的免费大片视频 | 国产亚洲精品久久久久久打不开 | 色网在线视频 | 波多野结衣国产在线 | 亚洲欧美在线视频观看 | 欧美日韩生活片 | 黄色片aaaa| 少妇被躁爽到高潮 | 日本男女激情视频 | 成人av视屏| 精品国产免费看 | 国产女人毛片 | 欧美日视频 | 天天射日 | 中文字幕在线视频网站 | 一区二区三区四区国产精品 | 成人免费看片在线观看 | 91干视频 | 手机av电影在线 | 中文字幕精品久久久久人妻红杏ⅰ | 人妻少妇偷人精品无码 | 少妇免费毛片久久久久久久久 | 国产一区免费看 | 国产精品腿扒开做爽爽爽挤奶网站 | 日韩乱码一区二区 | 久久久精品美女 | 天天操天天爱天天干 | 国产99精品 | 国产精品久久久久999 | 69xxxx日本| 色哟哟导航 | 国产高清免费视频 | 四虎4hu永久免费网站影院 | 亚洲精品福利 | 人妻一区二区视频 | 欧美成人精品一区二区三区在线观看 | 亚洲永久无码精品 | 久久狠狠爱 | 欧亚av| 国精品无码人妻一区二区三区 | 国产一区二区三区四区 | 爽爽影院免费观看 | 快色在线观看 | 日韩av一区在线播放 | 最新在线黄色网址 | 亚洲成av人片在线观看 | 久久久久在线视频 | 亚洲精品乱码久久久久久蜜桃不卡 | 亚洲精品资源 | 色人阁网站 | 欧美大浪妇猛交饥渴大叫 | 午夜精品av| 欧美视频黄色 | 婷婷午夜精品久久久久久性色av | 人妻va精品va欧美va | hs视频在线观看 | 久久精品5| 亚洲精品一区二区三区影院忠贞 | 在线观看高清av | 国产成人无码精品久久 | 一二三不卡 | 国产欧美日韩在线播放 | 西野翔夫の目の前で犯在线 | 一区二区三区日韩 | 大尺度摸揉捏胸床戏视频 | 欧美激情国产一区 | 久久精品a亚洲国产v高清不卡 | 精品在线视频一区二区三区 | 久久影院视频 | 男生尿隔着内裤呲出来视频 | 成人久久网站 | 草草影院第一页 | 亚洲图片欧美激情 | 国产一区二区免费看 | 台湾swag在线观看 | 欧美一区二区不卡视频 | 欧美成人一区在线观看 | 免费看的黄色录像 | 五月天激情小说 | 青青草社区视频 | 精品一区日韩 |