字串在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...