C++ 字符數組及字符串處理函數
本篇文章是對C++學習過程中,關於字符串這節部分的內容進行整理,本篇主要講解以字符數組形式存儲的字符串概念,及其相關函數。C++標准庫提供了兼容C語言的字符串處理函數,其頭文件為 string.h 或者使用 cstring。
1.字符數組
用來存放字符型數據的數組成為字符數組,其元素是一個個的字符。
字符數組的定義形式為:
char 字符數組名[常量表達式],......; 例如: char s[20]; // 定義字符數組 char s[4] = {'J', 'a', 'v', 'a'}; // 字符數組初始化
2.字符串的概念
- C++語言規定字符串是以 ‘\0’(ASCII值為0)字符作為結束符的字符數組。
- 在程序中可以通過判斷數組元素是否為空字符來判斷字符串是否結束,換言之,只要遇到數組元素是空字符,就表示字符串在此位置上結束,即使該空字符后還有字符。
- 由於字符串實際存放在字符數組中,所以定義字符數組時數組的長度至少為字符串長度加1(空字符也要占位)。
- 字符串常量是字符串的常量形式,它是以一對雙引號括起來的字符序列。
- C++總是在編譯時為字符串常量自動在其后增加一個空字符。
區分“a” 和 ‘a’
char c; char s[10] = "hello"; c = 'a'; // 正確 c = "a"; // 錯誤
C++語言總是在編譯時為字符串常量自動在其后增加一個空字符,例如"Hello"的存儲形式為:
如果在字符串常量中插入空字符,則字符串常量的長度會比看到的字符數目少,例如"ABC\0DEF"的存儲形式為:
3.字符串的輸入和輸出
(1)使用標准輸入輸出流,將整個字符串一次輸入或輸出
char str[80]; cin >> str; // 輸入字符串 cout << str; // 輸出字符串
(2)使用字符串輸入輸出函數
/* gets函數 */ char *gets(char *s); // 函數原型 char str[80]; gets(str); // 輸入字符串
gets函數輸入一個字符串到字符數組s中。s是字符數組或指向字符數組的指針,其長度應該足夠大,以便能容納輸入的字符串。
/* puts函數 */ int puts(char *s); // 函數原型 char str[80] = "Programming"; puts(str); // 輸出字符串
puts函數輸出s字符串,遇到空字符結束,輸出完后再輸出一個換行(’\n’)。s是字符數組或指向字符數組的指針,返回值表示輸出字符的個數。輸出字符不包括空字符。
4.字符串處理函數
(1)字符串復制函數strcpy char str1[10], str2[] = "Computer"; strcpy(str1, str2); // 復制str2到str1 (2)字符串復制函數strncpy char str1[10], str2[] = "Computer"; strcpy(str1, str2, 4); // 復制str2的前4個字符到str1 (3)字符串連接函數strcat char str1[10] = "ABC", str2[] = "123"; strcat(str1, str2); // 在str1后面連接str2,str2未變化 (4)字符串連接函數strncat char str1[10] = "ABC", str2[] = "123"; strcat(str1, str2, 4); // 將str2前4個字符連接到str1后面 (5)字符串比較函數strcmp if (strcmp(str1, str2) == 0) // 比較字符串相等 ...... if (strcmp(str1, str2) >0) // str1大於str2,根據字典順序比較,如aac > aab, a < aa ...... (6)計算字符串長度函數strlen n = strlen("Language"); // n = 8 char str[20] = "Visual Basic"; n = strlen(str); // n = 12 (7)字符串轉換成數值函數 f = atof("123.456"); // f = 123.456 i = atoi("-456"); // i = -456