1. 程式人生 > >C++ Primer Plus書之--C++字串

C++ Primer Plus書之--C++字串

首先類似c語言裡的字串:

// 陣列長度11實際上已經把字串結尾的\0字元考慮進去了
char bird[11] = "Mr. Cheeps";
// 讓編譯器自己判斷字串的長度
char fish[] = "Bubbles";

假如有如下程式碼:

char boss[8] = "Bozo";

雖然長度是8實際上之後前五位有效也就是B,o,z,o,\0(表示字串結尾)這五位後三位預設都是\0

注意's' 和 "s" 是不一樣的前者便是字元s(ASCII碼為83), 後者表示的是兩個字元's'和'\0'組成的字串

 

拼接字串常量

c++裡允許兩個用引號括起來的字串合併為一個, 也就是中間由空白(空格, 製表符, 換行符)連結的兩個字串都可以合成一個, 看如下程式碼:

#include "iostream"
using namespace std;

int main() {
	cout << "one two three" " four five six." << endl;
	cout << "one two three four five six." << endl;
	cout << "one two thre"
	"e four five six." << endl;
}

看執行結果:

 從執行結果可以看得出來, c++在拼接字串的時候不會在兩個字串之間新增空格, 第二個字串的第一個字元會佔據第一個字串的結束標記也就是\0, 也就是第二個字串會緊跟著第一個字串並從第一個字串的\0字元開始拼接

 

看一下下面這段程式碼的執行:

#include "iostream"
#include "cstring"
using namespace std;

int main() {
	const int Size = 2;
	char name1[] = "JackTom";
	cout << "sizeof name1 = " << sizeof(name1) << endl;
	cout << "strlen of name1 = " << strlen(name1) << endl;
	cout << "name1 = " << name1 << endl;
	
	char name2[Size];
	cout << "Please input your name : " << endl;
	cin >> name2;
	cout << "your input name is : " << name2 << endl;
	cout << "sizeof name2 = " << sizeof(name2) << endl;
	cout << "strlen of name2 = " << strlen(name2) << endl;
	cout << "========" << name2[2] << endl;
	
	
	char name3[] = "Tom";
	cout << sizeof(name3) << "  len : " << strlen(name3) << endl;
	cout << " name3[4] = " << name3[4] << endl;
	cout << " name3[4] = " << int(name3[4]) << endl;
}

執行結果如下:

 從執行結果看出雖然name2我宣告的是長度為2的char型陣列, 但是我複製了很長的字串也沒有發生陣列越界的問題,  感覺應該是因為char陣列 只是類似一個char* 所以如果沒有遇到\0就不當做字串結束

 

c++裡有string類, 提供了對字串的更方便的使用

在使用string類的時候需要引入string標頭檔案在程式開頭寫:

#include "string"

宣告一個string型別的變數方式如下:

string s1 = "one"; // 宣告並初始化

string s2, s3; // 僅宣告, 沒有初始化

string型別的變數可以直接賦給另一個string變數例如:

s2 = s1;  // 這時候s2  也是"one" 了

此外string型別的變數可以有類似java裡的操作:

s3 = s1 + s2;  // 可以把s1和s2拼接起來賦給s3

s1 += s2;  // 可以吧s1和s2拼接起來再賦給s1

 

在我們計算字串的長度的時候, 需要分清楚是c語言型別的字串還是c++裡的string類物件的字串例如:

char str_c[] = "hello world";

string str_cpp = "hello c++";

他們使用的方法使不一樣的, 分別是:

int len1 = strlen(str_c);

int len2 = str_cpp.size();