首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

C++ 字串完整指南:C 風格字串 vs std::string 類別、常用操作與效能考量

     編輯:C++ 入門

C++ 字串完整指南:C 風格字串 vs std::string 類別

C++ 提供兩種字串表示:C 風格字串(以 null 結尾的 char 陣列)與 std::string 類別(標準程式庫提供,功能豐富、記憶體自動管理)。現代 C++ 強烈建議優先使用 std::string。

C 風格字串

本質是 char[],以 '\0' 結尾。宣告初始化:

char greeting[6] = {'H','e','l','l','o','\0'};
char greeting[] = "Hello";  // 編譯器自動加 '\0'

C 風格字串記憶體表示

常用 C 函式 (<cstring>)

函式用途
strcpy(dest, src)複製字串
strcat(dest, src)連接字串(附加到 dest 末尾)
strlen(str)回傳字串長度(不含 '\0')
strcmp(s1, s2)比較字串,相等回 0
strchr(s, c)尋找字元首次出現位置
strstr(s1, s2)尋找子字串首次出現位置

C 風格字串範例

#include <iostream>
#include <cstring>
using namespace std;

int main() {
    char str1[10] = "Hello";
    char str2[10] = "World";
    char str3[10];
    int len;

    strcpy(str3, str1);
    cout << "strcpy: " << str3 << endl;

    strcat(str1, str2);
    cout << "strcat: " << str1 << endl;

    len = strlen(str1);
    cout << "strlen: " << len << endl;
    return 0;
}

輸出:

strcpy: Hello
strcat: HelloWorld
strlen: 10

std::string 類別 (<string>)

封裝動態記憶體管理,支援直觀運算子與豐富成員函式。

核心優勢

  • 自動記憶體管理,無緩衝區溢位風險
  • 支援 + 連接、== 比較、[]/at() 存取
  • 提供 size()/length()、substr()、find()、replace() 等高階操作
  • 可與 C API 互通:c_str() 取得 const char*

std::string 範例

#include <iostream>
#include <string>
using namespace std;

int main() {
    string str1 = "Hello";
    string str2 = "World";
    string str3;
    int len;

    str3 = str1;           // 複製
    cout << "str3: " << str3 << endl;

    str3 = str1 + str2;    // 連接
    cout << "str1+str2: " << str3 << endl;

    len = str3.size();     // 長度
    cout << "size: " << len << endl;
    return 0;
}

輸出:

str3: Hello
str1+str2: HelloWorld
size: 10

效能與選擇建議

場景建議
一般應用開發優先 std::string,安全、易用、效能足夠
高效能/嵌入式/與 C 介接考慮 char[] 或 std::string_view (C++17) 避免配置
固定長度、極度敏感std::array<char, N> 或 C 風格

常用 std::string 操作速查

  • s.size() / s.length():長度
  • s.empty():是否為空
  • s.clear():清空內容
  • s.substr(pos, len):子字串
  • s.find(str) / s.rfind(str):查找
  • s.replace(pos, len, str):替換
  • s.insert(pos, str) / s.erase(pos, len):插入/刪除
  • s.c_str():取得 C 風格指標
  • std::to_string(num):數值轉字串 (C++11)

總結

理解 C 風格字串有助於閱讀舊代碼與介接 C API,但現代 C++ 專案應以 std::string 為主力,配合 string_view (C++17) 實現零複製檢視,兼顧安全與效能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved