promotion image of download ymail app
Promoted

C與C++中的string用法有何不同?

C與C++中的string用法有何不同?

請盡可能解釋兩者使用上的差異、比較之。

最好能夠有範例。

越詳盡越好喔!感恩~

5 Answers

Rating
  • 7 years ago
    Favorite Answer

    你應該是要問char array跟string函式庫的差別吧~?

    先說說char這個型態,它是c內建的基本資料型態之一(int double等等也是)

    而string是發展出C++後,後人開發出來,相當實用的函式庫

    可以針對字串做許多處理,需要引進標頭檔<string>

    #include <iostream>

    using namespace std;

    #include <string>

    int main()

    {

    }

    -------------------------------輸入差異------------------------------

    比較同樣兩行

    char buff[10];

    string in;

    cin >> buff;

    cin >> in;

    buff最多僅能接受9個字元(最後要留一個字元存結束字元)

    但如果是string,你不管輸入多少,長度就是多少,它伸縮自如

    -------------------------------實作差異------------------------------

    以複製 比較 延長來講

    char字元陣列若要複製給另外一個,需要這麼寫

    char a[10],b[10];

    strcpy(a,b);

    但是string只要用"="就可以複製過去

    string x,y;

    cin >> y;

    x=y;

    比較的話,char array要呼叫strcmp

    char a[10],b[10];

    cin >> a;

    cin >> b;

    if ( strcmp(a,b)==0 )

    cout << "the same";

    string僅需使用==做比較

    string x,y;

    cin >> x;

    cin >> y;

    if(x==y)

    cout << "the same";

    如果要連接字串,char array需要呼叫strcat

    char a[10];

    char b[10];

    cin >> a;

    cin >> b;

    strcat(a,b); //b輸入的東西就會接在a後面

    但是要注意a的長度夠不夠接b

    如果是string,就不用這麼麻煩也不須顧慮什麼

    只要用 += 來接就可以

    string x,y;

    cin >> x;

    cin >> y;

    x+=y; //y輸入的東西接在x後面

    ------------------------------轉換------------------------------

    此兩個類型也可以互相轉換

    先看看string to char,相當容易,string有內建函式c_str(),直接回傳char array

    char a[10];

    string x;

    cin >> x;

    strcpy( a, x.c_str() ); //string轉換成char

    如果要char轉string更是容易

    string x;

    char a[10];

    x=a; //用"="就可以指派

    -----------------------------二維------------------------------

    char a[10][10];

    這樣代表有10條array,長度為10個ascii字元

    而string要做相同的效果,只要宣告一維

    string x[10];

    這樣就有10條string,而且長度還會根據你輸入的改變(比char省空間)

    -----------------------------長度------------------------------

    char array取得長度要呼叫strlen

    char a[10];

    cout << strlen(a);

    string也有內建函式庫可以取得長度

    string x;

    cout << x.size();

    ------------------------------------------------------------------

    string還有其他很多種用法

    詳細請參考此網站

    http://www.cplusplus.com/reference/string/string/

    Source(s): me & website
    • Commenter avatarLogin to reply the answers
  • 阿明
    Lv 5
    7 years ago

    C++ 提供string類別處理字串問題,重載運算子替代具名一些字串函式,比如串接兩個字串,

    string s1("Hello"), s2(" world"), s3;

    s3 = s1 + s2; //s3="Hello world"

    • Commenter avatarLogin to reply the answers
  • 其威
    Lv 7
    7 years ago

    補充 003

    現在 C++ 編譯器內建的 STL 都已經經過千錘百鍊,你很難寫出它更好的程式碼。

    (當你有能力寫出比它更好的程式碼的時候,就不會有「該不該自己寫」這種疑惑了 XD)

    所以,與其自己重新打造可能不會很圓的輪子,不如直接用已經做好的高品質輪子。

    • Commenter avatarLogin to reply the answers
  • 7 years ago

    在C或C++裡要儲存字串(一堆連續的字元),

    可以用char的靜態陣列或動態配置。

    靜態配置的缺點是無法在執行程式時才決定陣列大小或是改變大小。

    動態配置可以在程式執行時才決定大小,

    當空間大小不夠時也可以配置另一個更大的空間,

    將原本的資料複製到新的更大的空間。

    動態配置的缺點是管理起來要很小心,容易出錯,

    例如配置的空間不再使用時要「釋放記憶體」。

    C++內建的STL提供std::string是一種類別,

    將char動態配置要做的一堆有的沒的動作「封裝」起來自動幫你管理,

    例如上面說的「空間不夠,就配置更大空間,複製資料過去」、

    還有「釋放記憶體」的動作隱藏起來,

    當你不再需要管許多

    2013-02-19 17:46:28 補充:

    當你不再需要管許多有的沒的細結時,

    會讓你寫程式寫起來更簡單,更不容易出錯。

    std::vector也是做類似的事,可以參考看看。

    • Commenter avatarLogin to reply the answers
  • How do you think about the answers? You can sign in to vote the answer.
  • John
    Lv 6
    7 years ago

    自己看書,不就可以比較出來了?

    C沒有string型別,使用char array來達成。

    C++才有string型別,但是是以物件形式存在。

    • Commenter avatarLogin to reply the answers
Still have questions? Get your answers by asking now.