假設有五個人站在你麵前,分別是:
阿瓊,蘇拉,達薇亞,傑森,艾米麗
在水平線上。
寫出每個名字的首字母順序:
ASDJE
這被稱為字母序列。
類似地,在c++中,字符是所有符號的集合集,例如
[a - z]、[a - z] [0 - 9 ],[@,#,....].
定義:c++庫集合中定義的任意隨機字符序列在c++中稱為字符串。
c++允許程序員在任何需要的地方使用字符串來利用文本。字符串可以打印在屏幕上,反轉,連接(即連接),傳遞給函數等。
因為C代碼可以在c++編譯器上運行,所以我們可以在c++中使用C風格的字符串。
在C語言中,樣式字符串表示為字符數據類型數組,以空字符(\0)結束(結束)。它們的長度是固定的。
在c++中,字符串在使用之前必須聲明。
C風格字符串的聲明語法:
char array_name[string_size]="String"
其他聲明方式:
char array_name[] ={‘S’,‘t’,‘r’,‘我’,‘n’,‘g’,' \ 0}字符array_name[7] ={‘S’,‘t’,‘r’,‘我’,‘n’,‘g’,' \ 0}
注意:在聲明字符串時,如果字符串長度= ' n ',則最小字符串長度必須為' n+1 '。
但是,c++提供了一種聲明字符串的有效方法。
c++定義了一種使用字符串對象來保存字符串的方法,即,我們使用字符串數據類型(類字符串)來創建字符串。字符串對象沒有固定的長度。
因此,c++支持兩種類型的字符串聲明:
- c字串式
- 類類型
代碼:C字符串
#include < iostream> using namespace std;Int main() {char STR [4] = "sun";數< < str;返回0;}
輸出:太陽
代碼:字符串對象
#include using namespace std;Int main() {string xyz = "sun" count <
輸出:太陽
注意:要使用string對象,應該包含字符串庫#include
在c++中,內存是動態分配給字符串的。這意味著沒有內存的預先分配,這反過來確保了沒有內存的浪費。
連接:
在關於字符串的討論中,我們看到字符串是存儲在內存存儲器中的字符序列。從技術上講,我們將字符串稱為以空字符(\0)結束的一維字符數組。
如果我們想要連接兩個或多個字符串,c++有一個內置的功能來支持這種連接。將兩個或多個字符串組合或連接以形成一個結果字符串稱為串接。
例子:
字符串1號:印度贏得了
第二個字符串:在澳大利亞的係列賽。
串號的連接。1和字符串no。2:印度在澳大利亞贏得了係列賽。
c++中的字符串對象是使用' + '操作符連接的,以生成新的字符串。
代碼:使用' + '操作符連接字符串對象。
#include using namespace std;Int main() {string x= "india";字符串y = "在澳大利亞贏得了係列賽";字符串結果= x+y;Count <<'字符串number 1: <
輸出:
字符串1:印度
第二項:在澳大利亞贏得係列賽。
串號1和串號2的串聯:印度在澳大利亞贏得了係列賽。為了連接兩個C風格的字符串,我們可以使用strcat()函數。
代碼:使用strcat()函數拚接C風格字符串:
#include using namespace std;int main() {char s1[100] = "月亮是自然的";Char s2[100] = "地球衛星";數< < string1:“< < s1 < < endl;Count <<"string 2: " <
輸出:
弦1:月亮是自然的
字符串2:地球的衛星。
連接後:
第一組:月球是地球的天然衛星。
字符串2:地球的衛星
解釋:
使用strcat(s1,s2)函數時,s1字符串與s2字符串連接並存儲在s1中。這意味著s1被更新,而s2保持與以前的內容相同。
數字和字符串
從數學上講:數字是0,1,2,3,-3,-2,-8,100,200,2.4,…
字符串是:" Sachin ", " BASICS101 ", " 999 "等。
當在“要插入的字符串”中寫入數字時,該數字將被c++編譯器解釋為字符串。
+運算符在c++中用於數字的加法以及兩個字符串的連接。
因此,數字使用+進行相加,字符串使用+進行連接。
如果我們把兩個數字相加,結果也是一個數字:
例子:
int n1 = 10;int n2 = 69;Int sum = n1+n2;cout < <總和;
輸出:79
如果我們添加兩個字符串,結果也將是一個字符串:
例子:
字符串s1= " 15 ";字符串s2= " -25 ";字符串濃縮的= s1 + s2;cout < <濃縮的;
輸出:15-25…(字符串)
注意:如果我們試圖添加一個數字和一個字符串,那麼編譯器將拋出一個錯誤。
例子:
int = 10;字符串b= " 20 ";字符串c= a+b;cout < < c;
輸出:
錯誤
字符串長度
如果我們想知道字符串對象的長度,那麼可以找到它的長度。c++有兩個函數用於查找字符串的長度。
這些函數是size()和length()函數。
這兩個函數具有相同的含義,可以互換使用。
代碼:使用size()函數的字符串對象的長度:
輸出:
字符串長度= 9
注意:在計算字符串長度時,也要計算空格,空字符不計算在內。
Hello的長度=5
“Hello”的長度=7
為了計算C風格字符串的長度,使用strlen()函數。
要使用strlen()函數,請包含
str1的長度=5
str2的長度=6
注意:
函數的作用是:接受以空字符結束的字符串作為輸入,並返回字符串的長度作為輸出。在計算字符串長度時也要考慮空格。如果字符串不包含null字符,則函數不響應字符串,這意味著函數的行為沒有定義。
用戶輸入字符串
要為程序提供一個字符串,即用戶的輸入,我們可以在cin關鍵字上使用c++提取操作符>>從用戶通過鍵盤或任何輸入設備獲取字符串輸入。
例子:
輸出:
進入中央邦首府
中央邦的首府是:博帕爾(如果輸入的是博帕爾)
注意:
Cin關鍵字的編程方式是當有空格時將其視為終止字符。
這意味著,如果我們向字符串提供多個輸入單詞,那麼字符串將隻存儲和顯示一個單詞,並省略第一個空格後的所有單詞。
例子:
字符串名稱;cout<< " Enter your name: ";cin > >名稱;;cout<< " Your name is: " <
輸出:
輸入你的名字:Abhinav Mehta
你的名字是阿比納夫
(如果輸入的名字是Abhinav Mehta,那麼隻有Abhinav存儲在變量“a”中,其餘部分被省略,因此輸出是Abhinav而不是Abhinav Mehta)。
因此,要向字符串提供多行、多字的輸入,我們可以使用getline()函數讀取字符串。
它的語法是:
Getline (cin, string)
例子:
大綱:
美國的全稱是什麼?
美國的全稱是美利堅合眾國。
字符串的類型
我們已經在上麵討論了字符串的類型。總結一下:
- c++頭文件cstring中的C樣式字符串(或C- string)(從C的string.h移植過來),它將字符串表示為以空字符' \0 '(或0)結束的字符數組(以空字符結束的字符數組)。
- 新的c++字符串類在頭文件<字符串>。String是一個常規類,在構造函數和公共成員函數中定義了公共接口。
獲取字符串
假設我們想要訪問字符串中的單個字符。要做到這一點,我們可以使用字母的索引號。這叫做訪問字符串。
因為string是一個以空字符(\0)結尾的字符數組
每個字符都有訪問該字符的索引號。
例子:
str= " Flash 99 ";
然後,
str [0] = F, str[1] =“l”,str [2] = ' a ', str [3] = s, str[4] =“h”,str [5] = ' ', str [6] = 9, str [7] = 9, str [8] = ' \ 0 '
因此,要訪問字符串中的單個字母,請記住數組索引總是從0開始,每次移動到下一個字符時都加1。
索引用[]方括號表示。
這些方括號前麵是數組/字符串名稱。
例子:
string my= " Flash 99 ";cout < <我的[4];
輸出:h
使用索引,我們還可以改變字符,即改變字符串中的字符。
例子:
字符串abc= " MOUSE ";abc[0]= ' H ' // M改為H cout<
輸出:房子
在內存中存儲字符串
如果使用C樣式字符串格式聲明字符串。
然後將字符串的各個字符存儲在數組的各個元素中
例子:
char str[10]= " CAT ";
下圖顯示了字符串是如何存儲在內存中的。
str:
C | 一個 | T | \ 0 |
空字符後麵的數組元素不是字符串的一部分,它們是不相關的。
“空字符串”是第一個字符為空字符的字符串。空字符串的長度為0。
例子:
Char str[10]= " ";
str的內存存儲:
str
\ 0 |
如果使用字符串對象聲明字符串,則以不同的方式解釋字符串的存儲。
例子:
string name= " Karen ";
字符串名稱是一個字符串對象,它有許多數據成員。name的數據成員,例如p是指向動態分配的字符數組中的第一個字符的指針。name的數據成員,即length包含字符串name的長度。這裏,它包含5。name的數據成員,即capacity包含字符串name中存儲在數組中的有效字符數。
(指針表示它包含特定字段的地址。更多細節請參考c++中指針的內容。)
c++中的空字符串是字符串長度=0 name= " "
注意:
字符串可以存儲在堆或堆棧中。
字符串的存儲位置不取決於字符串的長度。
這取決於編譯器和使用的操作係統。
在fedora和red-hat Linux os中,字符串總是存儲在Heap中
(在C語言中,變量被存儲在堆棧中。除非我們使用malloc/calloc,否則它們不會存儲在堆中。)
忽略名稱空間
在程序員社區中,使用命名空間std的語句通常被認為是糟糕的實踐。
不使用此語句的最佳方法是在每次聲明類型時使用作用域操作符(::)指定標識符所屬的名稱空間。
即使沒有標準的名稱空間庫,也很少有c++程序能夠運行。這樣做:使用命名空間std line可以省略並替換為std關鍵字,後麵跟著用於使用string和cout對象的::操作符。
是否使用名稱空間庫完全取決於您自己。
例子:
#include #include int main() {std:: string abc= "瞧! ";std:: cout < < abc;返回0;}
注意:
在導入命名空間時,我們導入當前作用域中的所有類型定義。這個圖書館非常大。它有超過數百個預定義的標識符,因此開發人員可能會忽略這樣一個事實,即在std庫中有他們所需對象的另一個定義。因此,忽略/忽略這一點可能會使程序員指定自己的實現,並期望在程序的後麵部分使用它。因此,在當前名稱空間中,同一類型將存在兩個定義。這在c++中是非法的,即使在這樣做之後,程序成功編譯,也絕對無法知道在程序的哪個位置使用了哪個定義,因此定義的用法存在模糊性。
對這種歧義的一個完美解決方案是顯式指定(對編譯器)應該使用哪個名稱空間用戶定義的標識符來使用範圍操作符(::),這樣就減少了歧義。
是的,我們知道輸入std::每次我們定義一個類型是非常煩人的。它甚至使我們的代碼看起來更笨重,因為有很多類型定義。每次鍵入std::會使其他程序員難以閱讀代碼。所以在這樣做的時候要小心!
結論:
在上麵的段落中,我們展示了從名稱空間訪問(使用)標識符的另一種方法。還有其他方法可以做這種工作。在所有有效的情況下,避免將整個名稱空間導入到無錯誤程序的源代碼中!
采用良好的程序編寫實踐。從長遠來看,它們肯定會對你有幫助,盡管一開始可能要花很多時間。
開始編寫無錯誤、明確和健壯的代碼以獲得更好的結果!
字符串的操作
c++庫中有大量預定義的函數。我們在這裏討論了一些程序員社區經常使用的代碼。
輸入功能:
- getline():該函數用於在對象內存中存儲用戶輸入的字符流。
- push_back():該函數用於在字符串的末尾輸入一個字符。
- pop_back():該函數用於從字符串中刪除最後一個字符。
能力功能:
- capacity():-該函數返回分配給字符串的容量,它可以等於或大於字符串的大小。分配額外的空間,以便在將新字符添加到字符串時,可以有效地執行操作。
- resize():這個函數改變字符串的大小,可以增加或減少。
- length():該函數查找字符串的長度
- shrink_to_fit():—該函數減小字符串的容量,使其等於字符串的最小容量。如果確定不需要進一步添加字符,則此操作有助於節省額外的內存。
迭代器功能:
- begin():-該函數返回一個指向字符串開頭的迭代器。
- end():-該函數返回一個指向字符串末尾的迭代器。
- rbegin():-該函數返回一個指向字符串末尾的反向迭代器。
- rend():-該函數返回一個指向字符串開頭的反向迭代器。
操作功能:
- copy(" char array ", len, pos):-該函數複製參數中提到的目標字符數組中的子字符串。它需要3個參數,目標字符數組,要複製的長度和開始複製的字符串的起始位置。
- swap():-該函數將一個字符串與另一個字符串進行交換。
預定義字符串函數
函數 | 使用 |
strlen | 它計算字符串的長度。 |
strcat | 它在另一個字符串的末尾追加一個字符串。 |
strncat | 它將字符串的前' n '字符追加到另一個字符串的末尾。 |
拷貝字符串 | 它將一個字符串複製到另一個字符串。 |
strncpy | 它將字符串的前' n '字符複製到另一個字符串中。 |
比較字符串 | 它比較兩個給定的字符串。 |
strncmp | 它比較兩個字符串的前“n”字符。 |
strchr | 它查找給定字符在字符串中出現的次數。 |
strrchr | 它查找字符串中給定字符的最後一次出現。 |
strstr | 它查找給定字符串在另一個字符串中的第一次出現。 |
這些預定義函數是cstring庫的一部分。
至此,關於c++中的字符串的博客就結束了。我們希望您現在已經充分掌握了這個概念。想知道在哪裏可以免費學到人們夢寐以求的技能嗎?查閱有關課程beplay2018官网偉大的學習學院.