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

C 語言字符串操作函數大全:標準庫、內存函數與 C++ string 核心接口

     編輯:關於C語言

C 語言字符串操作函數大全:標準庫、內存函數與 C++ string 核心接口

一、C 標準庫字符串函數 (``)

函數功能備註
`strcpy(dst, src)`複製字符串(含 `\0`)dst 需足夠大
`strncpy(dst, src, n)`複製前 n 字符不足 n 補 `\0`
`strcat(dst, src)`追加字符串覆蓋 dst 末尾 `\0`
`strncat(dst, src, n)`追加前 n 字符自動加 `\0`
`strlen(s)`字符串長度(不含 `\0`)
`strcmp(s1, s2)`字典序比較返回 <0,=0,>0
`strncmp(s1, s2, n)`比較前 n 字符
`strchr(s, c)`正向查找字符首次出現返回指針/NULL
`strrchr(s, c)`反向查找字符最後出現
`strstr(s1, s2)`查找子串首次出現
`strpbrk(s, set)`查找 set 中任一字符首次出現
`strspn(s, set)`前綴全屬於 set 的長度
`strcspn(s, set)`前綴全不屬於 set 的長度
`strtok(s, delim)`分割字符串(破壞原串)非線程安全
`strdup(s)`複製字符串(內部 malloc)需手動 free
`strrev(s)`反轉字符串(非標準)MSVC 扩展
`strupr/strlwr`大小寫轉換(非標準)

二、字符串轉數值 (``)

  • `atoi/atol/atof` — 簡單轉換,無錯誤檢查
  • `strtol/strtod/strtoul` — 完整轉換,支持進制、尾指針返回、錯誤檢查

三、字符分類 (``)

`isalpha/isdigit/isspace/isalnum/isprint/iscntrl/ispunct/isxdigit/isupper/islower` — 參數為 `int`(字符或 EOF),返回非零/零。

四、內存操作函數 (``)

函數功能
`memcpy(dst, src, n)`複製 n 字節(不處理重疊)
`memmove(dst, src, n)`複製 n 字節(正確處理重疊)
`memset(dst, c, n)`設置 n 字節為字符 c
`memcmp(s1, s2, n)`比較 n 字節
`memchr(s, c, n)`查找字符 c 首次出現

五、C++ `std::string` 核心接口

`std::string` 非標準容器(無 `front/back`),但提供豐富操作:

構造/賦值

默認、C 串、計數字符、迭代器區間、子串、填充、移動等 13 種重載。

比較

`compare()` 6 種重載:與 string/C串/子串比較,返回 -1/0/1。

附加/插入

`push_back(c)`, `append()` 6 種重載,`insert()` 10 種重載,`operator+=`,`operator+` 5 種重載。

查找/替換/刪除

`find/rfind/find_first_of/find_last_of/find_first_not_of/find_last_not_of` 4 種參數形式。
`replace()` 10 種重載(位置/迭代器、字符串/C串/填充/區間)。
`erase()` 3 種:位置長度、單迭代器、迭代器區間。

子串/複製

`substr(pos, len)` 返回新 string。`copy(ptr, len, pos)` 複製到 C 緩衝區。
`c_str()` 返回 C 串指針,`data()` 同 `c_str()`(C++11 起保證以 `\0` 結尾)。

容量管理

`size/length`, `max_size`, `capacity`, `reserve`, `resize`(可指定填充字符),`shrink_to_fit` (C++11)。

六、輸入迭代器尾端約定

`istream_iterator` 默認構造持有空流指針,`operator==` 比較流指針,以此作為輸入結束哨兵。流讀取失敗時指針置空,配合 `operator bool`/`operator void*` 實現隱式轉換判斷。

七、常見坑點提醒

  1. 目標緩衝區大小不足導致溢出 — 用 `strncpy`/`snprintf`/`strlcpy`(BSD)防範。
  2. `strtok` 修改原串且非線程安全 — 多線程用 `strtok_r` 或 C++ `stringstream`/`regex`。
  3. 字符分類函數參數須轉 `unsigned char` 避免負值未定義行為:`isalpha((unsigned char)ch)`。
  4. `strcmp` 返回值僅能判斷正負零,不可假設具體值。
  5. C++ `string` 下標越界不拋異常,返回不可預知值 — 用 `at()` 帶邊界檢查。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved