淺談char字符類型和string字符串類型


char和string 兩者關系很微妙,因為都是字符,但是他們直接的聯系卻不是很多,這里我和大家聊聊字符的兩大勢力的相愛相殺。

char也就是字符型數據定義,string也就是字符串類型數據定義,乍一看他們很想,一個是字符一個是字符串,字符串不就是字符串起來得到的嗎?但是事實上,字符串即是“字符”串起來也不是“字符”串起來,聽起來是不是很奇怪,這里面的兩個字符的意義其實是不一樣的,第一個“字符”的意思是指一個單位的字形、類字形單位或符號的基本信息,而第二個“字符”的意思是字符類型。可能大家聽得還是很糊塗,我幫大家捋一捋,我們現在要先弄清楚一點,char是字符類型,屬於一個類,屬於編程語言中的一個數據類型,而他和字符有區別,字符是什么?字符指的是一個基本信息單位,也就是說字符是一個數據,它可以是數字也可以是字母。

所以,char是一個可以用來存儲字符數據的變量類型,而string就是一個存儲一串字符數據的變量類型,他們的共同點就是他們都是變量類型,都是用來存儲字符的。

我想這樣說大家應該明白了,既然他們倆如此相像,也就免不了他們要常常互動了,不過在講他們的交互之前,我要和大家再提一個概念,不過希望大家能先理清剛剛講的再看,不然會越看越亂的。

下面我要說的就是字符數組,char[],他是一組char類變量組成的,也可以用來存儲一串字符數據,和string的作用很是相像,但是本質是不一樣的,他們應該是數組變量,一個是類變量,char[]很好理解,他就是一個數組,每個單元里面放一個字符數據,string則是一個整體,最后以字符’\0’,作為分隔標識,而且他還有很多類函數可以調用使用。

下面舉個例子:

#include<iostream>
#include<string>
using namespace std;
void main()
{
    string Lyu;
    Lyu = "I love C++";
    cout << "字符串為:" + Lyu << endl;
    cout << "字符串的長度為:" << Lyu.length() << endl;
    cout << "是否為空:" << Lyu.empty() << endl << endl;        //若返回值為0,則指字符串不為空
    Lyu.append("!");            //字符串后追加一個!
    cout << "追加修改后的字符串為:" << Lyu << endl << endl;
    string Lyu_2;
    Lyu_2 = "I love too";
    Lyu.swap(Lyu_2);            //字符串數據交換
    cout << "交換修改后的字符串為:" << Lyu << endl << endl;
    int site;
    site = Lyu.find('l', 0);    //從0開始尋找出現l的位置並返回位置
    cout << "字符串中出現l的位置為:" << site << endl;
    site = Lyu.find("oo", 0);    //從0開始尋找出現oo的位置並返回位置
    cout << "字符串中出現oo的位置為:" << site << endl << endl;
    site = 0;                //遍歷搜索所有o的位置
    do
    {
        site = Lyu.find('o', site);
        if (site == -1)
            cout << "搜索完畢,無其他項" << endl;
        else
            cout << "字符串中出現o的位置為:" << site << endl;
        site++;
    } while (site != 0);
    getchar();
}

它的執行結果是:

 

 

 

和大家提了幾個常用函數,如

length()函數——查看字符串的長度

empty()函數——檢查字符串是否為空,0表示不為空

append("字符串")——在字符串后添加新字符

find('字符', 0)——從0位查看第一個出現的該字符的位置

……

 

具體理論區別大家有興趣可以去自行研究,我就不做太深入的介紹了,下面就到正題,這兩者的相互轉化。

string類怎么轉換成一個char數組

下面是代碼

#include<iostream>
#include<string>
using namespace std;
void main()
{
    string LyuS = "Welcome to learn C++";
    const char *LyuC = LyuS.data();        //字符串轉換為字符數組
    cout << "LyuC :"<< LyuC << endl;
    for(int i = 0 ; i < LyuS.length() ; i ++)
        cout << "LyuC[" << i << "] :" << LyuC[i] << endl;
    char LyuC_2[10];
    LyuC_2[0] = 'a';            //給字符數組進行賦值
    for (int j = 1; j < 9; j++)
    {
        LyuC_2[j] = LyuC_2[j - 1] +1;
    }
    LyuC_2[9] = '\0';
    string LyuS_2 = LyuC_2;            //字符數組轉化成字符串
    cout << "LyuS_2 :" << LyuS_2;
    getchar();
}

它的執行結果是:

 

 

 

const char *LyuC = LyuS.data();

這句話就是字符串轉字符數組,我在不少資料里面發現他們把字符數組和字符指針分開了,其實在C++里面數組在某種意義上就是連續不斷的指針,當然只限於在用法上,所以對於初學者如果不是要求完成度特別高,可以這么用.

string LyuS_2 = LyuC_2;

字符數組轉成字符串就很是容易了,直接賦值即可。

好了,今天的分享到此為止,希望大家能對這兩種字符存儲類型有所了解。

https://blog.csdn.net/yu1543376365/article/details/79176606

 

它的執行結果是:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM