在本文中,您將學(xué)習(xí)如何在C中處理字符串。您將學(xué)習(xí)聲明它們,對(duì)其進(jìn)行初始化以及將它們用于各種輸入/輸出操作。
字符串是字符的集合。C ++編程語(yǔ)言中通常使用兩種類型的字符串:
作為字符串類對(duì)象的字符串(標(biāo)準(zhǔn)C ++庫(kù)字符串類)
C字符串(C風(fēng)格的字符串)
在C編程中,字符集合以數(shù)組的形式存儲(chǔ),C ++編程也支持這種形式。因此,它稱為C 風(fēng)格字符串(C-string)。
c -string是以null字符結(jié)尾的char類型的數(shù)組,即\0 (null字符的ASCII值為0)。
char str[] = "C++";
在上面的代碼中,str是一個(gè)字符串,它包含4個(gè)字符。
雖然“c++”有3個(gè)字符,但是null字符\0被自動(dòng)添加到字符串的末尾。
char str[4] = "C++"; char str[] = {'C','+','+','\0'}; char str[4] = {'C','+','+','\0'};
與數(shù)組一樣,不需要使用為字符串分配的所有空間。例如:
char str[100] = "C++";
C ++程序顯示用戶輸入的字符串。
#include <iostream> using namespace std; int main() { char str[100]; cout << "輸入字符串: "; cin >> str; cout << "您輸入了: " << str << endl; cout << "\n輸入另一個(gè)字符串: "; cin >> str; cout << "您輸入了: "<<str<<endl; return 0; }
輸出結(jié)果
輸入字符串: C++ 您輸入了: C++ 輸入另一個(gè)字符串: Programming is fun. 您輸入了: Programming
請(qǐng)注意,在第二個(gè)示例中,僅顯示“Programming”,而不是“Programming is fun.”。
這是因?yàn)樘崛∵\(yùn)算符>>與C語(yǔ)言中scanf()方法一樣,認(rèn)為空格“ ”具有終止字符。
C ++程序讀取并顯示用戶輸入的整行。
#include <iostream> using namespace std; int main() { char str[100]; cout << "輸入一個(gè)字符串: "; cin.get(str, 100); cout << "您輸入了: " << str << endl; return 0; }
輸出結(jié)果
輸入一個(gè)字符串: Programming is fun. 您輸入了: Programming is fun.
要讀取包含空格的文本,可以使用cin.get函數(shù)。該函數(shù)有兩個(gè)參數(shù)。
第一個(gè)參數(shù)是字符串的名稱(字符串的第一個(gè)元素的地址),第二個(gè)參數(shù)是數(shù)組的最大容量。
在上面的程序中,str是字符串的名稱,100是數(shù)組的最大容量。
在C ++中,您還可以創(chuàng)建一個(gè)用于保存字符串的字符串對(duì)象。
與使用char數(shù)組不同,字符串對(duì)象沒有固定的長(zhǎng)度,可以根據(jù)需要進(jìn)行擴(kuò)展。
#include <iostream> using namespace std; int main() { //聲明一個(gè)字符串對(duì)象 string str; cout << "輸入字符串: "; getline(cin, str); cout << "您輸入了: " << str << endl; return 0; }
輸出結(jié)果
輸入字符串: Programming is fun. 您輸入了: Programming is fun.
在此程序中,str聲明了一個(gè)字符串。然后從用戶詢問字符串。
除了使用cin>>或cin.get()函數(shù)外,還可以使用getline()來獲取輸入的文本行。
getline()函數(shù)將輸入流作為第一個(gè)參數(shù),cin和str作為要存儲(chǔ)的行的位置。
字符串以類似的方式傳遞給函數(shù),數(shù)組也可以傳遞給函數(shù)。
#include <iostream> using namespace std; void display(char *); void display(string); int main() { string str1; char str[100]; cout << "輸入字符串: "; getline(cin, str1); cout << "輸入另一個(gè)字符串: "; cin.get(str, 100, '\n'); display(str1); display(str); return 0; } void display(char s[]) { cout << "輸入的字符數(shù)組為: " << s << endl; } void display(string s) { cout << "輸入的字符串是: " << s << endl; }
輸出結(jié)果
輸入字符串: Programming is fun. 輸入另一個(gè)字符串: Really? 輸入的字符串是: Programming is fun. 輸入的字符數(shù)組為: Really?
在上面的程序中,要求輸入兩個(gè)字符串。它們分別存儲(chǔ)在str和str1中,其中str是一個(gè)char數(shù)組,而str1是一個(gè)string對(duì)象。
然后,我們有兩個(gè)函數(shù)display(),它們將字符串輸出到字符串中。
這兩個(gè)函數(shù)之間的唯一區(qū)別是參數(shù)。第一個(gè)display()函數(shù)將char數(shù)組作為參數(shù),而第二個(gè)函數(shù)將string作為參數(shù)。
此過程稱為函數(shù)重載。了解有關(guān)函數(shù)重載的更多信息。