char str[] = {'h', 'e', 'l', 'l', 'o', '\0'};
它是用空字元來識別一陣列是否為字串
輸出:cout << str << endl;
也可這樣宣告
char str[] = "hello";
就算不加空白字元,它也會幫你加上
取得使用者輸入的字串
char str[80];
cout << "輸入字串:";
cin >> str;
cout << "您輸入的字串為 " << str << endl;
int main() { char str[] = "hello"; for(int i = 0; i < (sizeof(str)/sizeof(str[0])); i++) { if(str[i] == '\0') cout << " null"; else cout << " " << str[i]; } cout << endl; return 0; } 執行結果:h e l l o null(sizeof(str)/sizeof(str[0]))會回傳6
取得使用者輸入的字串
char str[80];
cout << "輸入字串:";
cin >> str;
cout << "您輸入的字串為 " << str << endl;
指定新字串要一個個指定
char str[80] = {'\0'};
str[0] = 'J';
str[1] = 'u';
str[2] = 's';
str[3] = 't';
str[4] = '\0';
cout << str << endl;
不能這樣
char str[80];
str = "Just";
上面這樣很麻煩,所以C++有提供函式
strcpy(str1, str2); // str2字串複製給str1字串
strcat(str1, str2); // str2字串串接在str1字串後
strlen(str); // 計算不含空字元的字串長度
strcmp(str1, str2); // 比較兩個字串
使用前,請加上#include <cstring>
#include <iostream> #include <cstring> using namespace std; int main() { char str1[80] = {'\0'}; char str2[] = "caterpillar"; cout << "str1: " << str1 << endl << "str2: " << str2 << endl << endl; // 將str2複製給str1 strcpy(str1, str2); cout << "str1: " << str1 << endl << "str2: " << str2 << endl << endl; // 將str2接在str1後 strcat(str1, str2); cout << "str1: " << str1 << endl << "str2: " << str2 << endl << endl; cout << "str1長度:" << strlen(str1) << endl << "str2長度:" << strlen(str2) << endl << endl; cout << "str1與str2比較:" << strcmp(str1, str2) << endl << endl; return 0; }執行結果:
str1:
str2: caterpillar
str1: caterpillar
str2: caterpillar
str1: caterpillarcaterpillar
str2: caterpillar
str1長度:22
str2長度:11
str1與str2比較:1
strcmp(str1, str2)會比較兩字串大小,相同傳0,不同傳1(不知為何我strcmp在Netbeans上會傳回48、-99這些奇怪的值...原因有待釐清.....)
strlen()傳回的不包含空字元
gets()函式可取得包括空白的字串
#include <iostream> #include <stdio.h> using namespace std; int main(){ char str[80]; cout << "輸入字串:"; gets(str); cout << "輸入的字串:" << str << endl; return 0; }使用前記得引入#include <stdio.h>
以下寫法會錯誤
char str1[] = "text1";
char str2[] = "text2";
str1 = str2; // error
cout << str1 + str2 << endl; // error
最好使用C++提供的string類別來操作字串,要引入#include <string>
現在有三種方法:
string str1; // 建立一個string物件,內容為空字串
string str2("caterpillar"); // 以字串常量建立字串
上面那行也可以這樣寫string str1 = "caterpillar";
string str3(str2); // 以string實例建立字串
string str2("caterpillar"); // 以字串常量建立字串
上面那行也可以這樣寫string str1 = "caterpillar";
string str3(str2); // 以string實例建立字串
str3是把str2的內容複製給str3,並建立一個新實例
現在可以這樣做:
str1 為空字串
str1 長度: 0
str2 長度: 11
str3 長度: 11
str3 與 str2 內容相同
#include <iostream> #include <string> using namespace std; int main() { string str1; string str2("caterpillar"); string str3(str2); if(str1.empty()) { cout << "str1 為空字串" << endl; } cout << "str1 長度: " << str1.size() << endl; cout << "str2 長度: " << str2.size() << endl; cout << "str3 長度: " << str3.size() << endl; if(str1 == str2) { cout << "str1 與 str2 內容相同" << endl; } if(str3 == str2) { cout << "str3 與 str2 內容相同" << endl; } return 0; }執行結果:
str1 為空字串
str1 長度: 0
str2 長度: 11
str3 長度: 11
str3 與 str2 內容相同
現在可以這樣寫:
string str1("text1");
string str2("text2");
....
str1 = str2;
string str2("text2");
....
str1 = str2;
也可把字元陣列內容複製給字串實例
string name("caterpillar");
char str[] = "justin";
char str[] = "justin";
name = str;
但反過來不行
char str[] = "justin";
string name("caterpillar");
str = name; // error
string name("caterpillar");
str = name; // error
可直接+串接字串
str1 = str1 + str2;
str1 = str1 + "\n";
str1 = str1 + "\n";
也可向操作陣列元素那樣:
c
a
t
e
r
p
i
l
l
a
r
下面是string類別常用的方法
str1: cater
str1: pillar
str1: caterpillar
尋找str1中的第一個pill: 5
在str1插入字串***: cater***pillar
str1長度: 14
下面是簡單的說明:
#include <iostream> #include <string> using namespace std; int main() { string name("caterpillar"); for(int i = 0; i < name.size(); i++) { cout << name[i] << endl; } return 0; }執行結果:
c
a
t
e
r
p
i
l
l
a
r
下面是string類別常用的方法
#include <iostream> #include <string> using namespace std; int main() { string str1; string str2("caterpillar"); string str3(str2); // assign: 指定字串 str1 = str1.assign(str2, 0, 5); cout << "str1: " << str1 << endl; str1 = str1.assign("caterpillar", 5, 6); cout << "str1: " << str1 << endl; str1 = ""; // append: 字串串接 str1 = str1.append(str2, 0, 5); str1 = str1.append(str3, 5, 6); cout << "str1: " << str1 << endl; // find: 尋找字串位置 cout << "尋找str1中的第一個pill: " << str1.find("pill", 0) << endl; // insert: 插入字串 cout << "在str1插入字串***: " << str1.insert(5, "***") << endl; cout << "str1長度: " << str1.length() << endl; return 0; }執行結果:
str1: cater
str1: pillar
str1: caterpillar
尋找str1中的第一個pill: 5
在str1插入字串***: cater***pillar
str1長度: 14
下面是簡單的說明:
方 法 | 說 明 |
assign(string, start, num) | 從string的第start個字元取出num個字元來指定給另一字串物件。 |
append(string, start, num) | 從string的第start個字元取出num個字元來附加至另一字串物件之後。 |
find(string, 0) | 從引發find的字串物件第0個字元尋找是否有符合string的子字串。 |
insert(start, string) | 將string插入引發insert的字串物件第start個字元之後。 |
length() | 傳回字串的長度。 |
沒有留言:
張貼留言