按域名瀏覽

什麼是c++中的字符串?

假設有五個人站在你麵前,分別是:

阿瓊,蘇拉,達薇亞,傑森,艾米麗

在水平線上。

寫出每個名字的首字母順序:

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++支持兩種類型的字符串聲明:

  1. c字串式
  2. 類類型

代碼: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++提取操作符>>從用戶通過鍵盤或任何輸入設備獲取字符串輸入。

例子:

字符串;cout<<“進入中央邦首府”;cin > >;//從鍵盤獲取用戶輸入;cout<< "中央邦首府是:" <
           

輸出:

進入中央邦首府

中央邦的首府是:博帕爾(如果輸入的是博帕爾)

注意:

Cin關鍵字的編程方式是當有空格時將其視為終止字符。

這意味著,如果我們向字符串提供多個輸入單詞,那麼字符串將隻存儲和顯示一個單詞,並省略第一個空格後的所有單詞。

例子:

字符串名稱;cout<< " Enter your name: ";cin > >名稱;;cout<< " Your name is: " <
           

輸出:

輸入你的名字:Abhinav Mehta

你的名字是阿比納夫

(如果輸入的名字是Abhinav Mehta,那麼隻有Abhinav存儲在變量“a”中,其餘部分被省略,因此輸出是Abhinav而不是Abhinav Mehta)。

因此,要向字符串提供多行、多字的輸入,我們可以使用getline()函數讀取字符串。

它的語法是:

Getline (cin, string)

例子:

字符串;cout<<“美國的全稱是什麼?”;getline (cin);cout<< " U.S.A.的全稱是:" <
           

大綱:

美國的全稱是什麼?

美國的全稱是美利堅合眾國。

字符串的類型

我們已經在上麵討論了字符串的類型。總結一下:

  1. c++頭文件cstring中的C樣式字符串(或C- string)(從C的string.h移植過來),它將字符串表示為以空字符' \0 '(或0)結束的字符數組(以空字符結束的字符數組)。
  2. 新的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++庫中有大量預定義的函數。我們在這裏討論了一些程序員社區經常使用的代碼。

輸入功能:

  1. getline():該函數用於在對象內存中存儲用戶輸入的字符流。
  2. push_back():該函數用於在字符串的末尾輸入一個字符。
  3. pop_back():該函數用於從字符串中刪除最後一個字符。

能力功能:

  1. capacity():-該函數返回分配給字符串的容量,它可以等於或大於字符串的大小。分配額外的空間,以便在將新字符添加到字符串時,可以有效地執行操作。
  2. resize():這個函數改變字符串的大小,可以增加或減少。
  3. length():該函數查找字符串的長度
  4. shrink_to_fit():—該函數減小字符串的容量,使其等於字符串的最小容量。如果確定不需要進一步添加字符,則此操作有助於節省額外的內存。

迭代器功能:

  1. begin():-該函數返回一個指向字符串開頭的迭代器。
  2. end():-該函數返回一個指向字符串末尾的迭代器。
  3. rbegin():-該函數返回一個指向字符串末尾的反向迭代器。
  4. rend():-該函數返回一個指向字符串開頭的反向迭代器。

操作功能:

  1. copy(" char array ", len, pos):-該函數複製參數中提到的目標字符數組中的子字符串。它需要3個參數,目標字符數組,要複製的長度和開始複製的字符串的起始位置。
  2. swap():-該函數將一個字符串與另一個字符串進行交換。

預定義字符串函數

函數 使用
strlen 它計算字符串的長度。
strcat 它在另一個字符串的末尾追加一個字符串。
strncat 它將字符串的前' n '字符追加到另一個字符串的末尾。
拷貝字符串 它將一個字符串複製到另一個字符串。
strncpy 它將字符串的前' n '字符複製到另一個字符串中。
比較字符串 它比較兩個給定的字符串。
strncmp 它比較兩個字符串的前“n”字符。
strchr 它查找給定字符在字符串中出現的次數。
strrchr 它查找字符串中給定字符的最後一次出現。
strstr 它查找給定字符串在另一個字符串中的第一次出現。

這些預定義函數是cstring庫的一部分。

至此,關於c++中的字符串的博客就結束了。我們希望您現在已經充分掌握了這個概念。想知道在哪裏可以免費學到人們夢寐以求的技能嗎?查閱有關課程beplay2018官网偉大的學習學院

《阿凡達》的照片
beplay2018官网優秀的學習型團隊
beplay2018官网偉大學習的博客涵蓋了技術的最新發展和創新,可以用來建立有回報的職業生涯。你會找到職業指南、技術教程和行業新聞,讓自己跟上快速變化的科技和商業世界。

請留言評論

您的電郵地址將不會公布。必填項已標記

用夢想的工作免費的印度最值得信賴的教育平台上的證書課程

滾動到頂部
Baidu
map