Android NDK開發之旅27--C++--string類的用法總結

Android NDK開發之旅 目錄

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

特別感謝:

Dream

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容