1.string類-初始化
#include <iostream>
//cout輸出 str 引用sstream Android里可以省略此引用 使用#include <android/log.h>
#include <sstream>
using namespace std;
void main() {
//方式一
string str1 = "aaaa";
cout << "str1:"<< str1 << endl;
//方式二
string str21 = string("bbbba");
string str22("bbbbb");
cout << "str21:" << str21 << endl;
cout << "str21:" << str22 << endl;
//方式三
string str = "ccccc";
string str3 = str;
cout << "str3:" << str3 << endl;
//方式四
string str40 = "ddddd";
string str4(str40);
cout << "str4:" << str4 << endl;
//方式五:連續拼接6個'e'
string str5(6, 'e');
cout << "str5:" << str5 << endl;
//方式六:指針方式
string* str6 = new string("fffff");
cout << "str6:" << *str6 << endl;
//方式七:設置為NULL
//在C++中string是一個類,底層實現也是C語言中的char*
string* str7 = NULL; //注意string str7 = NULL 報錯;
getchar();
}
執行輸出:
str1:aaaa
str21:bbbba
str21:bbbbb
str3:ccccc
str4:ddddd
str5:eeeeee
str6:fffff
2.string類-遍歷
#include <exception>
#include <iostream>
//cout輸出 str 引用sstream Android里可以省略此引用 使用#include <android/log.h>
#include <sstream>
using namespace std;
void main() {
string str = "Android";
cout << "數組遍歷方式" << endl;
//方式一:數組遍歷(在AS中越界不會報錯,內部做了處理)
for (int i = 0; i < str.length() ; ++i) {
//內部做了處理,如果下標越界,那么返回空'\0'
char c = str[i];
cout << "第" << i << "值:" << c << endl;
}
cout << endl << "迭代器方式" << endl;
//方式二:迭代器
int i = 0;
for (string::iterator it = str.begin(); it != str.end(); it++) {
char c = *it;
cout << "第" << i << "值:" << c << endl;
i++;
}
cout << endl << "at函數遍歷方式" << endl;
//方式三:at函數遍歷(越界,拋異常)
//在Java中charAt(i),C++中at(i)
//捕獲異常:兼容Android NDK做一些配置
//在Android NDK開發中r5之前默認不支持C++中的try catch
//但是在Android NDK R5開始支持C++中的try catch
//但是Android NDK編譯器默認異常控制特效關閉狀態,所以手動的打開異常控制
//打開配置:我們需要在gradle配置文件中配置(cppFlags = "-fexceptions")即可
try {
for (int i = 0; i < str.length() + 3; ++i) {
char c = str.at(i);
cout << "第" << i << "值:" << c << endl ;
}
}
catch (...) {
cout << "發生了異常......" << endl;
}
getchar();
}
執行輸出:
數組遍歷方式
第0值:A
第1值:n
第2值:d
第3值:r
第4值:o
第5值:i
第6值:d
迭代器方式
第0值:A
第1值:n
第2值:d
第3值:r
第4值:o
第5值:i
第6值:d
at函數遍歷方式
第0值:A
第1值:n
第2值:d
第3值:r
第4值:o
第5值:i
第6值:d
發生了異常......
3.string類和char之間的轉換
#include <exception>
#include <iostream>
//cout輸出 str 引用sstream Android里可以省略此引用 使用#include <android/log.h>
#include <sstream>
using namespace std;
void main() {
//3.1 string轉成char*
string str = "Android";
const char* crr1 = str.c_str();
cout << crr1 << endl;
//3.2 string轉成char[]數組
char crr2[20] = { 0 };
//第一個參數:拷貝目標
//第二個參數:拷貝的數量
//第三個參數:從哪里開始
str.copy(crr2, str.length(), 0);
cout << crr2 << endl;
}
執行輸出:
Android
Android
4.string類-字符串查找
#include <iostream>
//cout輸出 str 引用sstream Android里可以省略此引用 使用#include <android/log.h>
#include <sstream>
using namespace std;
void main() {
string str = "Android Developer love Android";
cout << "查找從指定位置開始的字符串起始位置" << endl;
//4.1 查找指定的字符串:find(順時針)
//參數一:查找條件
//參數二:從那個位置開始查找,默認是0開始
int index = str.find("Android", 0);
cout << "值:" << index << endl;
//未找到返回-1
int index1 = str.find("IOS", 0);
cout << "值:" << index1 << endl;
cout << endl << "查找從末尾指定位置開始的字符串末尾位置" << endl;
//4.2 查找最后一個字符串:find_last_of(逆時針)
int index2 = str.find_last_of("Android", str.length());
cout << "值:" << index2 << endl;
cout << endl << "查找某個字符串出現的次數" << endl;
//4.3 查找某個字符串出現的次數
int index3 = str.find("Android", 0);
//計數
int count = 0;
//string::npos默認值是:-1
//判斷是否存在
while (index3 != string::npos) {
count++;
index3 = index3 + 5;
index3 = str.find("Android", index3);
}
cout << "次數:" << count << endl;
getchar();
}
執行輸出:
查找從指定位置開始的字符串起始位置
值:0
值:-1
查找從末尾指定位置開始的字符串末尾位置
值:29
查找某個字符串出現的次數
次數:2
5.string類-字符串替換
#include <iostream>
#include <sstream>
using namespace std;
void main() {
//5.1 替換一個
string str0 = "Android Developer love Android";
str0.replace(0,3,"Hello");
cout << str0.c_str() << endl;
string str1 = "Android Developer love Android";
str1.replace(0, 7, "Hello");
cout << str1 << endl;
//5.2 替換所有
string str = "Android Developer love Android";
int index = str.find("Android", 0);
while (index != string::npos) {
str.replace(index, 7, "Hello");
index = index + 7;
//繼續往后查詢
index = str.find("Android", index);
}
cout << str.c_str() << endl;
getchar();
}
執行輸出:
Helloroid Developer love Android
Hello Developer love Android
Hello Developer love Hello
6.string類-字符串刪除
#include <iostream>
#include <sstream>
using namespace std;
void main() {
//6.1 刪除單個erase函數
string str = "Android Developer love Android";
//可以erase(0)代表刪除整個字符串,因為刪除數量number默認是字符串的長度
//erase()也是干掉
//參數有默認值
//str.erase();
//正確寫法
string::iterator index0 = find(str.begin(), str.end(), 'A');
str.erase(index0);
cout << str.c_str() << endl;
//6.2 刪除多個
string str1 = "Android Developer love Android";
//只一個指針
string::iterator index = find(str1.begin(), str1.end(), 'A');
str1.erase(index);
while (index != str1.end()) {
if (*index == 'A') {
str1.erase(index);
}
//指針位移
index++;
}
cout << str1.c_str() << endl;
getchar();
}
執行輸出:
ndroid Developer love Android
ndroid Developer love ndroid
7.string類-字符串插入
#include <iostream>
using namespace std;
void main() {
//從頭開始插入
string str1 = "love Android";
str1.insert(0, "I ");
cout << str1.c_str() << endl;
//從最后開始插入
string str = "Android Developer love";
str.insert(str.length(), " Android");
cout << str.c_str() << endl;
getchar();
}
執行輸出:
I love Android
Android Developer love Android
8.string類-大小寫轉換
#include <iostream>;
#include <algorithm>
using namespace std;
void main() {
//8.1 轉小寫
string str = "Android Developer love Android";
//參數一:從那一個位置開始
//參數二:到那一個位置結束
//參數三:目標對象
//參數四:格式(大寫、小寫)
//注意:參數四加'::'
//因為:在全局命名空間中這個tolower不是宏定義,
// 而是一個具體有實現的函數,所以需要明確命名空間
//在不同編譯環境下有差別
//例如:在VS 中不需要"::",但是在Android NDK環境下需要加"::"
transform(str.begin(), str.end(), str.begin(), ::tolower);
cout << str.c_str() << endl;
//8.2 轉大寫
string str1 = "Android Developer love Android";
transform(str1.begin(), str1.end(), str1.begin(), ::toupper);
cout << str1.c_str() << endl;
getchar();
}
執行輸出:
android developer love android
ANDROID DEVELOPER LOVE ANDROID