1. 程式人生 > 其它 >C++進階-3-容器(string)

C++進階-3-容器(string)

C++進階-3-容器

  1 #include<iostream>
  2 using namespace std;
  3 
  4 // string容器
  5 
  6 // 1.string的建構函式
  7 void test01() {
  8 
  9     string s1;  // 預設構造
 10 
 11     const char* str = "hello world!";
 12     string s2(str);
 13     cout << "s2 = " << s2 << endl;
 14 
 15     string
s3(s2); 16 cout << "s3 = " << s3 << endl; 17 18 string s4(10, 'a'); 19 cout << "s4 = " << s4 << endl; 20 21 } 22 23 // 2.string的賦值操作,operator= 或者 assign 24 void test02() { 25 26 string str1; 27 str1 = "hello world!"; 28 cout << "
str1 = " << str1 << endl; 29 30 string str2; 31 str2 = str1; 32 cout << "str2 = " << str2 << endl; 33 34 string str3; 35 str3 = 'a'; 36 cout << "str3 = " << str3 << endl; 37 38 string str4; 39 str4.assign("hello C++
"); 40 cout << "str4 = " << str4 << endl; 41 42 string str5; 43 str5.assign("hello C++", 4); 44 cout << "str5 = " << str5 << endl; 45 46 string str6; 47 str6.assign(str5); 48 cout << "str6 = " << str6 << endl; 49 50 string str7; 51 str7.assign(10, 'b'); 52 cout << "str7 = " << str7 << endl; 53 } 54 55 // 3.字串拼接 56 void test03() { 57 58 string str1 = ""; 59 str1 += "最帥"; 60 cout << "str1 = " << str1 << endl; 61 62 string str3 = "哈哈"; 63 str3.append(",我是豬八戒!"); 64 cout << "str3 = " << str3 << endl; 65 66 str3.append("abcdefg", 3); 67 cout << "str3 = " << str3 << endl; 68 69 string str2; 70 str2 = "lkjhg"; 71 str3.append(str2, 1, 3); // 引數2是從哪個位置開始擷取,引數參擷取字元個數 72 cout << "str3 = " << str3 << endl; 73 74 } 75 76 // 4.字串查詢和拼接 77 void test04() { 78 79 // 查詢 find 80 string str1 = "abcdefg"; 81 82 int pos = str1.find('df'); // 找到返回位置索引,找不到返回-1 83 if (pos == -1) { 84 cout << "未找到字串!" << endl; 85 } 86 else 87 { 88 cout << "找到字串,pos = " << pos << endl; 89 } 90 91 // 查詢 rfind 92 // 區別:find從左往右查詢,rfind是從右往左查詢 93 int rpos = str1.rfind('de'); 94 cout << "找到字串,rpos = " << rpos << endl; 95 96 97 // 替換 98 string str2 = "abcdefg"; 99 str2.replace(1, 3, "11111"); 100 cout << "str2 = " << str2 << endl; 101 102 } 103 104 // 5. 字串比較 105 void test05() { 106 107 //主要是比較字串是否相等 108 string str1 = "hello"; 109 string str2 = "hello"; 110 111 if (str1.compare(str2) == 0) { 112 cout << "str1 等於 str2" << endl; 113 } 114 else if(str1.compare(str2) == 1) { 115 cout << "str1 大於 str2" << endl; 116 } 117 else if (str1.compare(str2) == -1) { 118 cout << "str1 小於 str2" << endl; 119 } 120 } 121 122 // 6.字串存取 123 void test06() { 124 125 string str = "hello"; 126 127 // 1.通過 [] 訪問單個字元 128 for (int i = 0; i < str.size(); i++) { 129 cout << str[i] << " "; 130 } 131 cout << endl; 132 133 // 2.通過at方式訪問單個字元 134 for (int i = 0; i < str.size(); i++) { 135 cout << str.at(i) << " "; 136 } 137 cout << endl; 138 139 // 修改單個字元 140 str[0] = 'x'; 141 cout << "str = " << str << endl; 142 143 str.at(1) = 'y'; 144 cout << "str = " << str << endl; 145 146 } 147 148 // 7.字串插入和刪除 149 void test07() { 150 151 string str = "hello"; 152 153 // 起始下標都是從0開始 154 // 插入 155 str.insert(1, "222"); // h222ello 156 cout << "str = " << str << endl; 157 158 // 刪除 159 str.erase(2, 4); 160 cout << "str = " << str << endl; 161 } 162 163 // 8.字串子串 164 void test08() { 165 166 string str = "abcdef"; 167 string subStr = str.substr(1, 3); 168 cout << "subStr = " << subStr << endl; 169 170 // 實用操作 擷取郵件中的使用者名稱 171 string email = "[email protected]"; 172 int pos = email.find("@"); 173 string userName = email.substr(0, pos); 174 cout << "使用者名稱是:" << userName << endl; 175 176 } 177 178 179 int main() { 180 181 // 1.建構函式 182 //test01(); 183 184 // 2.賦值操作 185 //test02(); 186 187 // 3.字串拼接 188 //test03(); 189 190 // 4.字串查詢和替換 191 //test04(); 192 193 // 5.字串比較 194 //test05(); 195 196 // 6.字串存取 197 //test06(); 198 199 // 7.字串插入和刪除 200 //test07(); 201 202 // 8.字串子串 203 test08(); 204 205 206 system("pause"); 207 208 return 0; 209 } 210 211 // 總結 212 // 213 // string 容器 214 // string是C++風格的字串,而string本質上是一個類 215 // 216 // string和char的區別: 217 // 1.char*是一個指標 218 // 2.string是一個類,類內部封裝了char*,管理這個字串,是一個char*型的容器 219 // 220 // 特點: 221 // string類內部封裝了很多成員方法,如:find、copy、delete、replace、insert等 222 // string管理char*所分配的記憶體,不需要擔心複製越界和取值越界等,由類內部進行負責 223 // 224 // string建構函式 225 // 建構函式原型: 226 // string(); // 建立一個空字串,如:string str; 227 // string(const char *); // 使用字串s初始化 228 // 229 // string(const string& str); // 使用一個string物件初始化另一個物件 230 // 231 // string(int n, char c); // 使用n個字元c初始化 232 // 233 // string賦值操作 234 // 235 // 字串拼接 236 // 237 // 字串查詢和替換 238 // 查詢:查詢指定字串是否存在 239 // 替換:在指定的位置替換字串 240 // 241 // 字串比較 242 // 主要是比較字串是否相等 243 // 按照ASCII碼進行比較: 244 // = 返回0 245 // > 返回1 246 // < 返回-1 247 // 248 // 字串存取 249 // 250 // 字串插入和刪除 251 // 252 // 字串子串 253 //