【C++ 语言】C++字符串 ( string 类 | 创建方法 | 控制台输出 | 字符串操作 | 栈内存字符串对象 | string* )
生活随笔
收集整理的這篇文章主要介紹了
【C++ 语言】C++字符串 ( string 类 | 创建方法 | 控制台输出 | 字符串操作 | 栈内存字符串对象 | string* )
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- C++ 字符串 對象
- C++ 字符串 對象 創建方法
- C++ 字符串 對象 輸出到控制臺
- C++ 字符串 拼接
- C++ 字符串 方法調用 ( 棧內存對象 )
- C++ 字符串 方法調用 ( 堆內存對象 )
- C / C++ 字符串 完整代碼示例
C++ 字符串 對象
C++ 字符串 :
- 1.string 類 : C++ 中的字符串是 string 類 對象 ;
- 2.string 類定義位置 : 該 string 類定義在 iostream 頭文件中 , 不必引入另外的頭文件 ;
C++ 字符串 對象 創建方法
C++ 字符串 對象 創建方法 :
- 1.直接賦值 : 直接使用 C 字符串賦值 ;
- 2.構造方法 : 調用 string 構造方法 創建 string 對象 ;
- ① 傳入 string 參數 : string 構造方法可以傳入 string 對象 ;
- ② 傳入 C 字符串參數 : string 構造方法也可以傳入 一個 C 字符串 ;
- 3.使用 new 分配內存 : 使用 new 為 String 對象分配一塊堆內存空間 , 返回 string * 類型的指針 ;
調用該 string* 對象的方法需要使用 -> 進行調用 ;
堆內存使用原則 :
① 使用 new 申請的內存 , 需要使用 delete 釋放 ;
② 使用 new [] 申請的數組 , 需要使用 delete[] 釋放 ;
③ 使用 malloc 申請的內存 , 需要使用 free 釋放 ;
C++ 字符串 對象 輸出到控制臺
C++ 字符串 對象 輸出到控制臺 :
- 1.不能直接使用 cout 輸出 : 下面的用法是錯誤的 ; 使用 cout 不能直接將 string 對象輸出 ;
- 2.輸出方法 : 需要將 string 對象轉成 C 字符串 , 然后再輸出 :
在 Java 中輸出 String 對象 , 默認會調用其 toString 方法 , 但是在 C 中不可以直接使用 ;
C++ 字符串 拼接
C++ 字符串拼接 :
- 1.使用 “+” 符號拼接 : 這里的加號進行了操作符重載 , 字符串之間相加代表了字符串的拼接操作 ;
- 2.調用 string 對象的 append 方法 : 調用 string 對象的 append() 方法 , 傳入要拼接的字符串 ;
- 3.代碼示例 :
- 4.運行結果 :
操作符重載 : 重新定義了操作符的作用 , 這里的 “+” 就是重新定義了其作用 , 拼接字符串 ;
C++ 字符串 方法調用 ( 棧內存對象 )
C++ 字符串 方法調用 : 該字符串 ( string ) 對象 在棧內存中 ;
- 1.獲取字符串長度 : 調用 string 對象的 size() 方法 , 即可返回字符串長度 ;
- 2.判斷字符串是否為空 : 調用 string 對象的 empty() 方法 , 判斷字符串是否為空 ;
- 3.代碼示例 :
- 4.運行結果 :
使用 “.” 方式調用棧內存對象的方法 ;
C++ 字符串 方法調用 ( 堆內存對象 )
C++ 字符串 堆內存對象 方法調用 :
- 1.堆內存對象創建 : 使用 new 創建的 string 對象 需要在堆內存中為其分配內存 , 返回的是 string* 指針類型 ;
- 1.獲取字符串長度 : 調用 string 對象的 size() 方法 , 即可返回字符串長度 ; 需要使用 -> 代替 . 操作 ;
- 2.判斷字符串是否為空 : 調用 string 對象的 empty() 方法 , 判斷字符串是否為空 ; 需要使用 -> 代替 . 操作 ;
- 3.使用指針的好處 :
- ① 擴大作用域 : 如果在棧內存中使用 , 有作用域限制 , 出了棧內存 作用域 , 該對象就無效了 ;
- ② 方便參數傳遞 : 指針 大小為 4 ( 32 位系統 ) 或 8 ( 64 位系統 ) 個字節 , 其當做參數傳遞 比直接傳遞對象 ( 動輒幾十上百字節甚至更高 ) 效率更高 ;
- 4.代碼示例 :
- 5.運行結果 :
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* )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【C 语言】C 字符串 ( 表示方法 |
- 下一篇: 【C++ 语言】命名空间 ( names