久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

C 之string學習筆記(1)

 My鏡像站 2011-12-26

====================string類介紹====================

      在C++時代,由于誕生了類,,出項了一種C++風格的字符串,,也就是string型字符串。我們在調(diào)用string類來定義字符串的時候,,我們必須在程序開頭添加頭文件:

#include <string>

      而且,,由于string類存在于命名空間std中,這樣一來,,我們就必須使用

using namespace std;

  或者是使用

using std::string;

  才能訪問到string類,。string類的好處就是它在定義的時候隱藏掉了字符串的數(shù)組性質(zhì),因此在使用string類來定義一個字符串的時 候我們不需要考慮如何將字符串放在數(shù)組中,,因為string已經(jīng)為我們做好了這一步,。我們只需要想定義一個變量一樣定義它就行了。我們可以這樣說,,由于string是一個類,,那么C++就是運用string類的對象來保存字符串的,示例:

string str;

====================C++的string和C的char之比較==================== 

  • char類型的字符串無法直接進行比較,,而string類則可以,程序示例,;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
#include <string>
using namespace std;
int main()
{
    string str="初始化string型字符串";//初始化str
    char ch[]="初始化char型字符串";//初始化ch[]數(shù)組
    cout<<str<<endl;
    cout<<ch<<endl;
    //string示例
    cout<<"請輸入“狗”的英文單詞:"<<endl;
    cin>>str;
    if(str=="dog")
    {
        cout<<"狗:"<<str<<endl;
        cout<<str<<"的第一個字符是:"<<str[0]<<endl;
    }
    else
        cout<<"輸入錯誤\n";
    //char示例
    cout<<"請輸入“豬”的英文單詞:"<<endl;
    cin>>ch;
    if(ch=="pig")
    {
        cout<<"豬:"<<ch<<endl;
        cout<<ch<<"的第一個字符是:"<<ch[0]<<endl;
    }
    else
        cout<<"輸入錯誤\n";
    return 0;
}

  我們一運行程序會發(fā)現(xiàn)對于輸入豬的英文pig,,就算輸入正確了程序還是會提示輸入錯誤,原因就在于程序的第23行,,由于數(shù)組ch[]的數(shù)組名ch所在的內(nèi)存地址與“pig”所在的內(nèi)存地址肯定不一樣,,那么無論如何都不會執(zhí)行程序23行之后的if語句。有圖為證:

      以上問題也不是沒有解決方法的,,只要我們利用循環(huán)的方式來比較數(shù)組ch中的每一個字符就可以了,。這個check函數(shù)我們就不舉例了哈,自己動手,,豐衣足食嘛~~~我們還有一種很簡單的方法來比較字符串,,即采用:

strcmp(str1,str2)

  這個函數(shù)的運作機理很簡單:

  • 假如str1<str2,則返回一個小于0的數(shù)字,,如-1
  • 假如str1==str2,,則返回0
  • 假如str1>str2,則返回一個大于0的數(shù)字,,如1

      這樣一來,,我們就可以把程序的第23行改成:

if(strcmp(ch,"pig")==0)

  這樣就對了,輸出如下:

      但是值得說明的一點就是,,雖然使用了strcmp函數(shù)簡化了程序代碼,,但是在簡化也不如string類的字符串,,我們可以看到在程序的第13行,直接比較就行了,。這是因為string類中的函數(shù)已經(jīng)重載了比較運算符(==,>,<),。因此string類就允許使用運算符直接對他的字符串對象進行比較。

  • string型字符串可以直接賦值,,而char不行,。如果我們在程序中有下面這段話,則編譯器肯定是會報錯的:
    1
    2
    3
    char a[]="Hello,C++";
    char b[]="Hello,Qt";
    a=b;

          原因就是我們不能把一個數(shù)組名直接賦給另外一個數(shù)組名,,唯一能做的就是對數(shù)組元素進行逐個賦值,。比如說:

    1
    2
    3
    a[0]=b[0];
    a[1]=b[1];
    ...

          值得注意的一點是,同上面一樣,,雖然我們無法直接賦值,,但是我們可以調(diào)用strcpy函數(shù)來實現(xiàn)賦值的目的:

    strcpy(str1,str2);

          這個函數(shù)的作用就是把str2中的字符依次復制給str1。值得注意的一點就是,,在進行賦值之前,,我們必須要保證str1足夠大,以便能夠容納下str2 中所有的字符串,。所以有了這個函數(shù),,我們就可以把上面的程序改一下,把a=b改成strcpy(a,b);就可以了,。而如果我們采用string類就不會 出現(xiàn)上訴麻煩,,因為string類重載了運算符=,這就是的對象之間可以直接賦值,。程序和輸出如下圖所示:

  •  string型字符串可以直接合并,,但是char型的字符串卻不能直接合并,必須用到strcat函數(shù):

    strcat(str1,str2);

          strcat是string catenate的縮寫,。它的作用就是將第2個字符串合并到第1個字符串中,。因此,第1個字符串必須保證能夠容納下兩個字符串的長度,。針對這一點,,我們來看如下這個程序:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include <iostream>
    using namespace std;
     
    int main()
    {
        char a[]="Hello,C++";
        char b[]="Hello,Qt";
        strcat(a,b);
        cout<<a<<endl;
        cout<<b<<endl;
    }

          我們一運行程序就崩潰了,產(chǎn)生如下圖所示的錯誤,。這就是因為我們在初始化的編譯器自動為數(shù)組a設定了長度,,為10個字符長(注意,,包括‘\0’),,而數(shù)組 b的長度為9個字符長。但是在程序的第8行調(diào)用strcat函數(shù)的時候,,由于b的9個字符長超出了a所能容納的字符長度,,而去修改了其他地址的數(shù)據(jù),這樣 程序自然而然就崩潰了。

          要想避免這個錯誤,,我們就必須自定義數(shù)組a所能容納的最大的大小,。反映在程序里面,我們就把程序的第6行修改為:

    char a[20]="Hello,C++";

    而如果我們使用string類的對象來實現(xiàn)兩個字符串合并,,就不會產(chǎn)生上訴煩惱,,因為string類已經(jīng)重載了+運算符,示例與輸出結果:


          通過這兩個簡單的例子之間的對比,,我們可以很明顯地看出來,,C++字符串的合并比C語言的字符串合并更加方便有效,而且不易發(fā)生錯誤,。

      學習筆記1 到此結束,,^_^......


    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,,謹防詐騙,。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多