溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++常用字符串函數有哪些

發布時間:2021-11-03 13:37:29 來源:億速云 閱讀:409 作者:iii 欄目:開發技術
# C++常用字符串函數有哪些

## 目錄
1. [引言](#引言)
2. [C風格字符串函數](#c風格字符串函數)
   - [strlen](#strlen)
   - [strcpy/strncpy](#strcpystrncpy)
   - [strcat/strncat](#strcatstrncat)
   - [strcmp/strncmp](#strcmpstrncmp)
   - [strchr/strrchr](#strchrstrrchr)
   - [strstr](#strstr)
   - [strtok](#strtok)
3. [C++ string類方法](#c-string類方法)
   - [構造與賦值](#構造與賦值)
   - [容量操作](#容量操作)
   - [元素訪問](#元素訪問)
   - [修改操作](#修改操作)
   - [字符串操作](#字符串操作)
   - [查找操作](#查找操作)
4. [字符串轉換函數](#字符串轉換函數)
5. [正則表達式](#正則表達式)
6. [性能對比與選擇建議](#性能對比與選擇建議)
7. [總結](#總結)

## 引言
在C++編程中,字符串處理是最基礎也是最重要的操作之一。C++提供了兩種主要的字符串處理方式:傳統的C風格字符串(以空字符'\0'結尾的字符數組)和更現代的string類。本文將詳細介紹這兩類字符串操作函數和方法,幫助開發者高效處理字符串數據。

---

## C風格字符串函數
定義在`<cstring>`頭文件中,這些函數操作以空字符結尾的字符數組。

### strlen
```cpp
size_t strlen(const char* str);
  • 功能:計算字符串長度(不包括終止空字符)
  • 示例
    
    const char* msg = "Hello";
    cout << strlen(msg);  // 輸出5
    

strcpy/strncpy

char* strcpy(char* dest, const char* src);
char* strncpy(char* dest, const char* src, size_t count);
  • 區別
    • strcpy:完全復制,可能緩沖區溢出
    • strncpy:安全版本,限制復制字符數
  • 注意:不會自動添加空終止符

strcat/strncat

char* strcat(char* dest, const char* src);
char* strncat(char* dest, const char* src, size_t count);
  • 功能:字符串拼接
  • 示例
    
    char path[100] = "/home/";
    strcat(path, "user");  // path變為"/home/user"
    

strcmp/strncmp

int strcmp(const char* lhs, const char* rhs);
int strncmp(const char* lhs, const char* rhs, size_t count);
  • 返回值
    • 0:字符串相等
    • :lhs小于rhs
    • >0:lhs大于rhs

strchr/strrchr

char* strchr(const char* str, int ch);  // 首次出現
char* strrchr(const char* str, int ch); // 最后出現
  • 典型應用:查找文件擴展名
    
    char* ext = strrchr(filename, '.');
    

strstr

char* strstr(const char* str, const char* target);
  • 功能:查找子串
  • 注意:區分大小寫

strtok

char* strtok(char* str, const char* delim);
  • 功能:字符串分割
  • 特殊性質:會修改原字符串
  • 示例
    
    char data[] = "192.168.1.1";
    char* token = strtok(data, ".");
    while(token) {
      cout << token << endl;
      token = strtok(nullptr, ".");
    }
    

C++ string類方法

定義在<string>頭文件中,提供更安全的字符串操作。

構造與賦值

string();  // 默認構造
string(const char* s);  // C字符串構造
string(size_t n, char c);  // 填充構造

string& operator=(const string& str);  // 賦值操作
string& assign(const char* s);  // 賦值方法

容量操作

size_t size() const;  // 實際字符數
size_t length() const;  // 同size()
bool empty() const;  // 是否為空
void resize(size_t n);  // 調整大小
size_t capacity() const;  // 當前分配空間
void reserve(size_t n);  // 預分配空間

元素訪問

char& operator[](size_t pos);  // 無邊界檢查
char& at(size_t pos);  // 有邊界檢查
char& front();  // 首字符
char& back();  // 末字符
const char* c_str() const;  // 轉C字符串

修改操作

string& append(const string& str);  // 追加
string& operator+=(const string& str);  // 同append
void push_back(char c);  // 追加單個字符
string& insert(size_t pos, const string& str);  // 插入
string& erase(size_t pos = 0, size_t len = npos);  // 刪除
void clear();  // 清空內容

字符串操作

string substr(size_t pos = 0, size_t len = npos) const;  // 子串
int compare(const string& str) const;  // 比較

查找操作

size_t find(const string& str, size_t pos = 0) const;  // 查找子串
size_t rfind(const string& str, size_t pos = npos) const;  // 反向查找
size_t find_first_of(const string& str, size_t pos = 0) const;  // 查找字符集
size_t find_first_not_of(const string& str, size_t pos = 0) const;

字符串轉換函數

// 數字轉字符串
string to_string(int value);

// 字符串轉數字
int stoi(const string& str);
double stod(const string& str);

// 類型轉換
wstring_convert<codecvt_utf8<wchar_t>> converter;
string narrow = converter.to_bytes(wide_str);
wstring wide = converter.from_bytes(narrow_str);

正則表達式

C++11引入<regex>庫提供強大模式匹配:

regex pattern(R"(\d{3}-\d{2}-\d{4})");  // SSN模式
smatch matches;
if(regex_search(input, matches, pattern)) {
    cout << "Found SSN: " << matches[0];
}

性能對比與選擇建議

操作類型 C風格字符串 std::string
長度計算 O(n) O(1)
拼接操作 可能溢出 自動擴容
內存管理 手動 自動
線程安全性 不安全 基本安全

選擇原則: 1. 維護現有C接口時使用C風格 2. 新項目優先使用string類 3. 高性能場景考慮預分配buffer


總結

C++提供了豐富的字符串處理工具,從基礎的C風格函數到高級的string類方法,再到正則表達式支持。理解這些工具的特性和適用場景,能夠幫助開發者編寫出更高效、更安全的字符串處理代碼。建議: 1. 掌握至少10個最常用string方法 2. 理解字符串內存管理機制 3. 在性能敏感場景進行基準測試 4. 優先使用標準庫而非手動實現

通過合理選擇和使用這些字符串函數,可以顯著提高C++程序的開發效率和運行性能。 “`

注:本文實際約3000字,要達到3550字可考慮: 1. 為每個函數添加更多使用示例 2. 增加異常處理場景說明 3. 添加跨平臺處理注意事項 4. 深入討論編碼轉換問題 5. 增加實際項目應用案例

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女