c 學習筆記9 c風格字串和多維陣列

2021-10-09 02:31:35 字數 3832 閱讀 5726

c風格字串:字串字面值,書寫的字串存放在陣列中,並以』\0』結束;如:

char a=

;//顯示新增'\0';維度為4

char b=

"c++"

;//自動新增 '0';維度為4

char c=

;//維度為3,沒有'\0'

c風格字串的函式:

1)strlen§ 返回p的長度,不包括』\0』

2)strcmp(p1,p2) 比較p1和p2的相等性,相等返回0,p1>p2返回正值,p1使用此類函式必須是以空字元』\0』為結束的*字元*陣列。

注1:使用string型別的時候要知道其長度:使用.size()函式

strlen僅用於c風格字串,char且有空字元。

注2:使用string型別的時候要比較使用,直接比較。s1注:任何出現字串字面值的地方都可以使用以空字元結束的字元陣列來替代。

1)允許使用以空字元為結束的字元陣列來初始化string物件,或為string物件賦值。

2)在string物件的+法運算中允許使用以空字元為結束的字元陣列作為乙個運算物件

3)在string物件的復合賦值運算中允許使用以空字串結束的字元陣列作為右側的運算物件。

不能利用string物件直接初始化指向字元的指標,如:

string s

("hello");

char

*str = s;

//錯誤,不能直接使用

const

char

*str =s.

c_str()

;//正確

.c_str()函式返回的是乙個指標,指標的型別是const char*

可以使用陣列初始化vector,反之不行

int a=

;vector <

int>v(

begin

(a),

end(a)

);

注:應該盡量使用vector和迭代器,避免使用內建陣列和指標,盡量使用string,避免使用c風格字串。

多維陣列:

理解:無多維陣列,只有陣列的陣列

int a[3]

[4];

//維度為3的陣列,每個陣列元素是乙個含有4個整數的陣列

1)多維的初始化:

int a[3]

[4]=

,,};

//顯示初始化3行4列

int a[3]

[4]=

;//顯式初始化3行4列

int a[3]

[4]=

,,};

//初始化了每行的第乙個元素,未初始化的預設為0

int a[3]

[4]=

;//初始化第一行的4個元素,其餘的預設初始化

2)下標:0為起始行列

int a[3]

[4];

int b[3]

[4][

5];a[

2][3

]= b[2]

[3][

3];//確定的賦值,把b的第3行第4列第4個元素賦給a的第三行第4列

int(

&r)[4]

= a[1]

;//把a的第二行元素(含有4個)繫結到r(

3)雙層for迴圈:

for

(i=0

;i++i)

//第一層遍歷所有的行

for(j=

0;j)//第二層遍歷每行下的列元素

4)使用範圍for

注:使用範圍for迴圈處理多維陣列,除了最裡層 的迴圈外,其他的都要使用引用型別:

int a[3]

[4];

for(

auto

&r :a)

for(

auto c :r)

//如果寫成for(auto c :a)在輸出的就是這12個元素的位址了

cout<

int a[3]

[4];

int(

*p)[4]

= a;

//p指向a的第一行,,所指的是乙個維度為4 的陣列

int*p[4]

;//p是含有4個整形指標的陣列

int*(&r)[10]

=ptr;

//r是乙個引用,引用的是乙個有10個元素的陣列,10個元素的型別是整形指標。

區分:整形指標的陣列和指向多維陣列的指標。

使用指標輸出a[3][4]

int a[3]

[4]=

;for

(auto p =a;p!=a+3;

++p)

//注意,寫成for(int *p=a;p!=a+3;p++)編譯不通過

for(

auto q =

*p;q!=

*p+4

;++q)

cout<<

*q<<

" "

;

注:p的型別是指向含有4個整數的陣列的指標,q的型別是指向整數的指標

int a[3]

[4]=

;for

(int

(*p)[4

]=a;p!=a+

3;p++

)for

(int

*q =

*p;q!=

*p+4

;q++

) cout<<

*q<<

" ";

使用型別別名也可以

int a[3]

[4]=

;using int_arr =

int[4]

;//將含有4個元素的陣列指標型別命名為int_arr,

for(int_arr*g =a;g!=a+

3;g++

)for

(int

*j =

*g;j!=

*g+4

;j++

) cout<<

*j<<

" ";

使用範圍for迴圈

int a[3]

[4]=

;for

(auto

&r :a)

for(

auto c:r)

cout<" ";

使用for迴圈:

int a[3]

[4]=

;for

(int i=

0;i<

3;i++

)for

(int j=

0;j<

4;j++

) cout<[j];

使用標準庫函式begin和end

int a[3]

[4]=

;for

(auto p =

begin

(a);p!=

end(a)

;++p)

for(

auto q =

begin

(*p)

;q!=

end(

*p);

++q)

cout<<

*q;

C風格字串與C 風格字串

c風格字串 對字串進行操作的 c 函式定義在標頭檔案中 1.字串定義 char result 2.字串的最後乙個字元是null字元 0 可以通過這個字元確定字串的結尾。3.strlen 返回的是字串的大小 因此,分配空間的時候,需要比字串的實際空間大1.e.g.char copystring con...

C風格字串與C 風格字串

c風格字串 對字串進行操作的 c 函式定義在標頭檔案中 1.字串定義 char result 2.字串的最後乙個字元是null字元 0 可以通過這個字元確定字串的結尾。3.strlen 返回的是字串的大小 因此,分配空間的時候,需要比字串的實際空間大1.e.g.char copystring con...

c風格字串與c風格字串陣列

include includeusing namespace std int main 輸出結果 0034ff10 0034ff10 0034ff04 013bdc80 char str abcd 先在文字常量區為 abcd 常量分配5b,接著在棧裡為指標str分配4b,並接收 abcd 字串的首位...