字串初步

2021-09-05 10:01:21 字數 2645 閱讀 6129

字串在qbasic中,是一種型別。而在c++裡面,則一般不用這種型別來完成字串的操作,而是通過字元陣列來完成字串的操作(c++裡面的string型別處理速度較慢)。

字元型別我們以前就已經學習過了,是char型別。而字元陣列就是類似這樣定義的陣列:char s[100]。

通過這樣的定義,我們就可以通過

cin >> s

來得到,輸入的字串。特別需要注意的是,字串的輸入,是以所有非可視字元為結束的。也是就是說,如果輸入的一行字串是:i am a student,使用cin >> s;後,則s裡面儲存的只有「i」。如何得到帶空格的字串,後面將會介紹。

一、字串的基本操作

(1)字元陣列名的本質(陣列名的本質)

陣列的名字到底代表什麼?陣列的名字,實際上代表的是這個陣列在記憶體中連續儲存的起始位置。而陣列的下標即為離陣列起始位置的偏移量。

在char s[100]中,s是字元陣列的陣列名。這個名字就代表在記憶體中的起始位置。100代表,定義了100個連續的空間,用來儲存字元。

(2)字元陣列的初始化

在給陣列賦初值的時候,可以通過定義時,

char s[100]=;

來給字元陣列賦初始值。但是,不能在程式中。

如: s = 「123131」;

是不被允許的。

當然,我們也可以通過 cin >> s;給字元陣列s輸入初始值,它代表,在s開始的空間連續的儲存輸入的字元。 (

3)字元陣列的結束

這是字元陣列中,最最重要的知識點!在記憶體中字元陣列連續的進行儲存,但是,並不是所有定義了的空間都一定會用來儲存內容。沒有輸入那麼多內容時,後面的空間儲存的是記憶體空間中的隨機內容。所以,字元陣列在記憶體中儲存時,就必須有乙個固定的符號來當成結束符。所以,在c/c++中就定義了』\0』來當成字串的結果。也就是說,在每個我們輸入的字串後,c++還會自動在你輸入的字串後加上乙個符號』\0』。所以,當我們需要儲存100個字元時,一定要定義101個空間,用來儲存最後乙個結束字元』\0』。

注意一點,在寫\0時,我們加上的是單引號。強調一點,在c++中,字串需要用雙引號來表示,而對於乙個符號,則必須用單引號來表示。

(4)字元陣列的操作

既然說是字元陣列,則字元陣列就有完全的陣列性質,對於陣列中的每乙個符號,都可以單獨用下標來訪問和操作。如:

char s[100];

s[0]=』a』; s[1]=』b』; s[2]=』a』;

s[3]=』\0』;

這樣在輸出:cout << s;的時候才能夠輸出aba。

(5)字元陣列的實際長度

在輸入字元陣列後,想要知道到底輸入了多長的字元。我們可以用最簡單的辦法,strlen函式來得到長度。但是,這個長度是如何做到的呢?這就要看結束的符號了。找到』\0』的位置就找到了字元陣列實際上儲存的字元長度。

char s[100];

cin >> s;

int i=0;

while (s[i]!=』\0』) i++;

cout << i << endl;

這樣就得到了字元的長度。

(6)字元陣列的複製

經過前面的內容,我們應該很容易理解:

char s1[100],s2[100];

cin >> s1;

s2 = s1;

是不能夠被允許的。因為s1和s2是兩個不同的位址,用s2的位址來覆蓋s1的位址,是不能夠被接受的,所以不行。那麼,我們如何來對付這樣的問題呢?與前面的操作相似。同樣是要把』\0』前的所有符號,賦值到s2的對應的位置裡,但是,務必要注意後面的』\0』。

char s1[100],s2[100];

int i=0;

cin >> s1;

while (s1[i]!=』\0』)

s2[i]=』\0』;

最後一條是不可缺少的。因為,只有這樣,s2中,才有了標誌字串結束的符號。

當然也可以,使用字串複製函式strcpy來操作,例如:

strcpy(s2,s1);

就是將s1的內容複製到s2裡。

(7)字串的連線

我們可能還需要將乙個字串連線到另外乙個字串後面。這樣就要同樣做如下的操作。

#include

#include

using namespace std;

int main(int argc, char *argv)

當然也可以用字串操作函式strcat(s1 , s2)。

(8)兩個字串的比較

對於兩個字串,經常需要對字串進行比較。第乙個大於第二個,則輸出1;第乙個小於第二個輸出-1;兩個相等輸出0。

#include

#include

#include

using namespace std;

int main(int argc, char *argv)

當然,以上內容可以用字串比較函式strcmp來完成,例如:

n = strcmp(s1 , s2);

(9)帶空格的輸入

如果輸入的內容中帶有空格,則不能用簡單的cin來完成這樣的功能。就需要使用cin.getline來完成這個功能,如:

char s[100];

cin.getline(s , 80);

代表,以回車為結束,最多儲存79個字元(第80個儲存的是』\0』)。

其他操作,與上面相同。

對字串複製的初步認識

char brr 5 聚合型別,只初始化一部分,剩餘部分為0 0 char err 5 利用字串初始化 char frr 5 abc char grr 5 abcde error 陣列元素溢位 字串一定以 0 結尾,這個字元看不見 0 是字串結尾的標識,只要是字串一定有 0 char irr abc...

ORACLE in 字串,字串,字串

因為傳進來的引數是 字串,字串,字串,要實現in 字串,字串,字串 select from htl price p where p.hotel id 30073328 and p.able sale date between to date 2009 03 27 yyyy mm dd and to ...

字串,字串陣列,字串指標!!

字串 字元陣列實際上是一系列字元的集合,也就是 字串 string 字串陣列 在c語言中,沒有專門的字串變數,沒有string型別,通常就用乙個字元陣列來存放乙個字串。c語言規定,可以將字串直接賦值給字元陣列 在c語言中,字串總是以 0 作為串的結束符。上面的兩個字串,編譯器已經在末尾自動新增了 0...