跳转至

標準庫

C 標準庫

C 標準庫操作字符數組 char[]/const char*

參見:fprintffscanf空終止字節字符串

  • printf("%s", s):用 %s 來輸出一個字符串(字符數組)。
  • scanf("%s", &s):用 %s 來讀入一個字符串(字符數組)。
  • sscanf(const char *__source, const char *__format, ...):從字符串 __source 裏讀取變量,比如 sscanf(str,"%d",&a)
  • sprintf(char *__stream, const char *__format, ...):將 __format 字符串裏的內容輸出到 __stream 中,比如 sprintf(str,"%d",i)
  • strlen(const char *str):返回從 str[0] 開始直到 '\0' 的字符數。注意,未開啓 O2 優化時,該操作寫在循環條件中複雜度是 \(\Theta(N)\) 的。
  • strcmp(const char *str1, const char *str2):按照字典序比較 str1 str2str1 字典序小返回負值,兩者一樣返回 0str1 字典序更大則返回正值。請注意,不要簡單的認為返回值只有 01-1 三種,在不同平台下的返回值都遵循正負,但並非都是 01-1
  • strcpy(char *str, const char *src): 把 src 中的字符複製到 str 中,str src 均為字符數組頭指針,返回值為 str 包含空終止符號 '\0'
  • strncpy(char *str, const char *src, int cnt):複製至多 cnt 個字符到 str 中,若 src 終止而數量未達 cnt 則寫入空字符到 str 直至寫入總共 cnt 個字符。
  • strcat(char *str1, const char *str2): 將 str2 接到 str1 的結尾,用 *str2 替換 str1 末尾的 '\0' 返回 str1
  • strstr(char *str1, const char *str2):若 str2str1 的子串,則返回 str2str1 的首次出現的地址;如果 str2 不是 str1 的子串,則返回 NULL
  • strchr(const char *str, int c):找到在字符串 str 中第一次出現字符 c 的位置,並返回這個位置的地址。如果未找到該字符則返回 NULL
  • strrchr(const char *str, char c):找到在字符串 str 中最後一次出現字符 c 的位置,並返回這個位置的地址。如果未找到該字符則返回 NULL

C++ 標準庫

C++ 標準庫操作字符串對象 std::string,同時也提供對字符數組的兼容。

參見:std::basic_stringstd::basic_string_view

  • 重載了賦值運算符 +,當 + 兩邊是 string/char/char[]/const char* 類型時,可以將這兩個變量連接,返回連接後的字符串(string)。
  • 賦值運算符 = 右側可以是 const string/string/const char*/char*
  • 訪問運算符 [cur] 返回 cur 位置的引用。
  • 訪問函數 data()/c_str() 返回一個 const char* 指針,內容與該 string 相同。
  • 容量函數 size() 返回字符串字符個數。
  • find(ch, start = 0) 查找並返回從 start 開始的字符 ch 的位置;rfind(ch) 從末尾開始,查找並返回第一個找到的字符 ch 的位置(皆從 0 開始)(如果查找不到,返回 -1)。
  • substr(start, len) 可以從字符串的 start(從 0 開始)截取一個長度為 len 的字符串(缺省 len 時代碼截取到字符串末尾)。
  • append(s)s 添加到字符串末尾。
  • append(s, pos, n) 將字符串 s 中,從 pos 開始的 n 個字符連接到當前字符串結尾。
  • replace(pos, n, s) 刪除從 pos 開始的 n 個字符,然後在 pos 處插入串 s
  • erase(pos, n) 刪除從 pos 開始的 n 個字符。
  • insert(pos, s)pos 位置插入字符串 s
  • std::string 重載了比較邏輯運算符,複雜度是 \(\Theta(N)\) 的。