c++的字符串的處理

剛學(xué)C++那會(huì),真的是對(duì)字符串頭痛了好久,就是后面自己一不小心還是容易在字符串上犯錯(cuò)誤,自己覺(jué)得這里就是一個(gè)大坑,在看完了c++ primer對(duì)于字符串的描述之后感覺(jué)自己對(duì)于字符串已經(jīng)沒(méi)有那種遙不可及的神秘感了,所以還是C++primer大法好。言歸正傳,該介紹一下字符串的內(nèi)容了。

1.字符串

字符作為一種基本的數(shù)據(jù)類(lèi)型,但是實(shí)際中確實(shí)字符串用的更多,但比較坑爹的就是C++中是沒(méi)有專門(mén)為字符串寫(xiě)一個(gè)基本的數(shù)據(jù)類(lèi)型的。但是C++對(duì)此的不久也是不少的,比如C++是有一個(gè)C-style string的說(shuō)法的,和字符數(shù)組有一點(diǎn)不一樣的。

char arr1[11] = "HelloWorld"
char arr2[10]={'H','e','l','l','W','o','r','l','d'};//not a string 
char arr3[11]={'H','e','l','l','W','o','r','l','d','\0'};//the same string as arr1.

我記得很清楚的一句話說(shuō)明了數(shù)組和字符串的區(qū)別就是(自己的理解,不是原話)

當(dāng)你把一個(gè)數(shù)組傳給函數(shù)的時(shí)候,你只給一個(gè) 數(shù)組名是不夠的(也就四數(shù)組的地址)因?yàn)槟悴恢罃?shù)組的長(zhǎng)度,你是不能夠放心的對(duì)數(shù)組進(jìn)行操作的,所以往往還要傳一個(gè)數(shù)組長(zhǎng)度的整數(shù),但是對(duì)于一個(gè)string來(lái)說(shuō)就不同了,傳一個(gè)名字就能夠獲取這個(gè)string的信息,因?yàn)镃++規(guī)定了string的結(jié)尾都是'\0',所以函數(shù)操作string不需要他的長(zhǎng)度,只需要通過(guò)'\0'來(lái)控制


而對(duì)于數(shù)組的操作肯定就少不了相應(yīng)指針的幫忙,所以就有了字符指針
char *p1 = arr;//一開(kāi)始還會(huì)覺(jué)得奇怪?jǐn)?shù)組名是指針,但是后面學(xué)的越多,就覺(jué)得沒(méi)什么了,甚至還有點(diǎn)巧妙
重點(diǎn)來(lái)了,就是對(duì)于指針的運(yùn)算,開(kāi)始的時(shí)候真的讓人頭昏

using namespace std;
int main()
{
     char arr1[12] = "HelloWorld";
     char *p1 = arr;
     cout<<*p1<<endl;
     p1++;
     cout<<*p1<<"at"<<p1<<endl;
     char **p2 = &arr;
     p2++;
     cout<<*p2<<"at"<<p2<<endl;//dangerous
}

輸出的結(jié)果可能會(huì)讓你覺(jué)得神奇(如果你以前沒(méi)學(xué)過(guò)的話)
對(duì)于&符號(hào)作用于一個(gè)數(shù)組名,其實(shí)是一種指向指針的指針。
對(duì)于這個(gè)問(wèn)題,C++primer作了一個(gè)比較好的解釋,就是*是相當(dāng)于把一個(gè)指針降低了一個(gè)等級(jí),而&取址符相當(dāng)于把指針升了一個(gè)等級(jí)。例如題中p1=&arr;把p1定義為一個(gè)指向整個(gè)數(shù)組的一個(gè)指針對(duì)象,而之前的p1=arr;是把p1定義為一個(gè)指向數(shù)組元素的指針對(duì)象。對(duì)應(yīng)++號(hào)跳過(guò)指針指向的一個(gè)最小指向?qū)ο蟆?/p>


2.字符串輸出

c++中對(duì)于字符數(shù)組的輸出仿佛是別有用心。一開(kāi)始的時(shí)候都會(huì)感覺(jué)有點(diǎn)奇怪。

char word[] = "helloworld";
char *p1 = word;
cout<<word<<endl;
cout<<*p1<<endl;
cout<<p1<<endl;

結(jié)果是

helloworld
helloworld
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 指針是C語(yǔ)言中廣泛使用的一種數(shù)據(jù)類(lèi)型。 運(yùn)用指針編程是C語(yǔ)言最主要的風(fēng)格之一。利用指針變量可以表示各種數(shù)據(jù)結(jié)構(gòu); ...
    朱森閱讀 3,612評(píng)論 3 44
  • 一、字符串操作 strcpy(p, p1) 復(fù)制字符串 strncpy(p, p1, n) 復(fù)制指定長(zhǎng)度字符串 s...
    JaiUnChat閱讀 1,750評(píng)論 0 7
  • 本文轉(zhuǎn)自:http://www.cnblogs.com/lidabo/p/5225868.html 1)字符串操作...
    XiaohuiLI閱讀 9,684評(píng)論 0 0
  • C語(yǔ)言指針的總結(jié) 1. 變量 不同類(lèi)型的變量在內(nèi)存中占據(jù)不同的字節(jié)空間。 內(nèi)存中存儲(chǔ)數(shù)據(jù)的最小基本單位是字節(jié),每一...
    xx_cc閱讀 4,120評(píng)論 11 39
  • “光陰似箭,日月如梭?!币晦D(zhuǎn)眼,時(shí)間已經(jīng)飛奔到2027年,我已經(jīng)成為一名駐瑞士的知名導(dǎo)游,那里是一個(gè)優(yōu)美而令人向往...
    章魚(yú)去哪兒閱讀 306評(píng)論 0 2

友情鏈接更多精彩內(nèi)容