zoukankan      html  css  js  c++  java
  • C++ 使用 string 型態

    直接操作字元陣列來進行字串操作是比較低階的行為,就如之前所說的,陣列本身對自己的長度沒有意識,所以無法判斷自己是否為空字串,而陣列也不能直接指定給另一個陣列,所以您無法直接將字串指定給另一個字串,您也無法對兩個字串直接進行串連的動作,例如:
    char str1[] = "text1";
    char str2[] = "text2";
    str1 = str2; // error
    cout << str1 + str2 << endl; // error

    C++標準函式庫提供了string類別,您可以使用這個類別來建立實例,並進行各項高階的字串抽象行為,像是字串的指定、串接等,要使用string類別,您要先含入string表頭檔:
    #include <string>

    您可以使用三種方式來建立一個string類別的物件(object),例如:
    string str1; // 建立一個string物件,內容為空字串
    string str2("caterpillar"); // 以字串常量建立字串
    string str3(str2); // 以string實例建立字串

    第一個建構字串的方法會建立一個空字串,空字串也是字串,只是長度為0;第二個方法會以字面常量內容來建立string實例;第三個方法會「複製」 str2的內容,並建立一個新的string實例。

    您可以使用size()來測試字串長度,使用empty()來測試字串是否為空,使用==來比較兩個字串的字元內容是否相同,例如:


    #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;

    這個指定會將str1原本的字串記憶體空間釋放,並重新配置足夠容納str2的記憶體空間,然後將str2的各個字元複製至str1;您也可以將一個C- Style的字串指定給string,例如:
    string name("caterpillar");
    char str[] = "justin";
    name = str;

    但是您不能將一個string實例指定給字元陣列,例如:
    char str[] = "justin";
    string name("caterpillar");
    str = name; // error


    您也可以直接使用+運算子來串接字串,例如:
    str1 = str1 + str2;
    str1 = str1 + "\n";

    string的實例可以使用下標運算子[ ]指定索引來存取相對應位置的字元,就有如字元陣列的操作一般,例如:


    #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類別所生成的物件擁有幾個常用的方法(method),例如:

    #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() 傳回字串的長度。

    以上的幾個方法都是重載(Overload)多次的方法,另還有其它的方法,例如compare()等等,更多的參數與方法使用請參考C++相關線上文件。
  • 相关阅读:
    Tomcat下HTTPS双向认证配置以及客户端调用案例
    Java本地运行中文正常,部署到Weblogic中文乱码
    gson 忽略掉某些字段不进行转换
    JavaScript中定义对象的四种方式
    使用CSS3实现超炫的Loading(加载)动画效果
    不要再使用JS框架了
    HTML5, CSS3, ES5新的web标准和浏览器支持一览 转
    js常用的事件对象
    jQuery用面向对象的思想来编写验证表单的插件
    五个值得尝试的前端开发工具
  • 原文地址:https://www.cnblogs.com/nickchan/p/3104415.html
Copyright © 2011-2022 走看看