大家知道,C++編程語言中,對於字符串的操作是一個比較基礎而且重要的操作技巧。C++字符串一般情況下可以通過以下兩種形式進行表示,分別為;傳統字符串,以及字符數組這兩種。
1.C++字符串之 傳統字符串
a) char ch1[] = {“liangdiamond”}
b) char ch2[] = {“hello world”}
其中關於傳統字符串,有幾個常用的函數
a) strcpy()函數
b) strcat()函數
c) strlen()函數
d) strcmp()函數
e) strlwr()函數:大寫變為小寫
f) strupr()函數,小寫變為大寫
2. C++字符串之字符數組
從表面上看,一個字符串是一個字符數組,但在c++語言中,它們不同。字符串是以’\0’結束的字符型數組。下面這段代碼展示字符串和字符數組的區別:
- #include < iostream>
- using namespace std;
- int main()
- {
- char a[] = {"hello"};
- char b[] = {'h','e','l','l','o'};
- int la = 0;
- int lb = 0;
- cout< < "The length of a[]:"< < sizeof(a)/sizeof(char)< < endl;
- cout< < "The length of b[]:"< < sizeof(b)/sizeof(char)< < endl;
- system("Pause");
- return 0;
- }
可以修改程序:
- #include < iostream>
- using namespace std;
- int main()
- {
- char a[] = {"hello"};
- char b[] = {'h','e','l','l','o','\0'};
- int la = 0;
- int lb = 0;
- cout< < "b="< < b< < endl;
- cout< < "The length of a[]:"< < sizeof(a)/sizeof(char)< < endl;
- cout< < "The length of b[]:"< < sizeof(b)/sizeof(char)< < endl;
- system("Pause");
- return 0;
- }
但是數組名就是數組的首地址,所以數組名本身就可以理解為一個指針,只不過,它是指針常量,所謂指針常量,就是指針不能改變所指向的地址了,但是它所指向的地址中的值可以改變。
例如:
- #include < iostream>
- using namespace std;
- int main()
- {
- char a[] = {"hello"};
- char b[] = {'h','e','l','l','o','\0'};
- a++;
- system("Pause");
- return 0;
- }
編譯報錯。
C++字符串中字符數組和字符指針雖然在形式上很接近,但在內存空間的分配和使用上還是有很大差別。數組名不是一個運行時的實體,因此數組本身是有空間的,這個空間由編譯器負責分配。而指針是一個變量運行時實體),它所指向的空間是否合法要在運行時決定。
- #include < iostream>
- using namespace std;
- int main()
- {
- char s[] = "abc";
- char* p = "abc";
- s[0] = 'x';
- cout< < s< < endl;
- //p[0] = 'x'; 編譯報錯
- cout< < p< < endl;
- system("Pause");
- return 0;
- }
S的地址和p所指向的地址並不是一個地方,可以推斷0x00417704是常量區。所以貌似不能改。用反匯編其實看的更清楚一點。指針好就好在它能指向內存,不是ROM 區的好似都能改。
以上就是對C++字符串的相關介紹。