最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C/C++之string和char的使用及區(qū)別

 更新時(shí)間:2026年03月31日 14:24:56   作者:zbliquan  
文章主要介紹了C++中字符(char)、字符串(string)和字符串(char[])的區(qū)別,以及字符串的相關(guān)操作函數(shù),如strcpy、strcat、strlen等,同時(shí),文章還討論了char和string異同,以及char*和string互相轉(zhuǎn)化的方法

一、概念

  • Char:在C中,char是定義一個(gè)字符,存儲的是一個(gè)字符,占一個(gè)字節(jié),如’a’,C++中char是字符類型,是一種基本數(shù)據(jù)類型;
  • String:string是一個(gè)模板類,實(shí)例化的是對象,它的內(nèi)部是封裝了const char*類型,是一個(gè)常量指針,指向可以改變,但是指向的值不能改變。
  • 字符串:字符串是使用’\0’終止的一維字符數(shù)組(字符串的長度為字符個(gè)數(shù)加1,’\0’也占一個(gè)長度)。在C++中,字符串有兩種,一種是字符串char[],即C風(fēng)格的字符串,一種是封裝好的字符串類String。

二、操作函數(shù)

  • strcpy(s1,s2) 復(fù)制字符串s2到s1,s2復(fù)制到了最前面
  • strcat(s1,s2) 連接字符串s2到字符串s1的末尾
  • strlen(s1) 返回字符串s1的長度
  • strcmp(s1,s2) 比較字符串的大小,若s1=s2,返回0,若s1> s2 ,返回正數(shù),若s1< s2,返回負(fù)數(shù)
  • strchr(s1,ch) 返回一個(gè)指針,指向s1中字符ch第一次出現(xiàn)的位置
  • strstr(s1,s2) 返回一個(gè)指針,指向s1中字符串s2第一次出現(xiàn)的位置

三、例子

1、字符串定義例子

char greet[] = "hello";//這兩行語句等價(jià)
char greet[6] = {'h','e','l','l','o','\0'};

2、定義string及一些基本操作

string s1 = "hello";
string s2 = "world";
string s3;
s3 = s1;//復(fù)制
s3 = s1 + s2;//連接兩個(gè)字符串
int len = s3.size();//獲取字符串的長度

3、string中的每一個(gè)字符,使用單引號,是char類型

string s = "hell0";
char ch = s[0]; //'h'

char ch='abc';
cout<<ch; //打印c
//只打印一個(gè)c,為什么只打印一個(gè)c?
//abc是一個(gè)字符串,賦值給一個(gè)字符時(shí),會取字符串中最低的位數(shù)賦值。

4、字符串輸出

string a;
printf("%s",a);
//輸出亂碼,對于string這類,要用一下加.c_str()的方式,這個(gè)函數(shù)是返回字符串string的首地址,因?yàn)?s要的是char*,但是string只是字符串,要通過函數(shù)名來返回其首地址。
string a;
printf("%s",a.c_str());

四、Char和string異同

在c++中,C風(fēng)格的字符串和String類的比較,可以看下面這張圖

char是一個(gè)字符型指針,可以指向一個(gè)字符數(shù)組,與string不太相同的是,字符數(shù)組存儲的字符串必須以’\0’結(jié)尾,代表結(jié)束符號,而string并不一定以’\0’結(jié)束。

string的內(nèi)存管理是由系統(tǒng)處理的,除非內(nèi)存池用完,否則基本上不會出現(xiàn)什么內(nèi)存問題。

而char的內(nèi)存需要自己手動管理了,很容易出現(xiàn)內(nèi)存問題。

五、char*和string的互相轉(zhuǎn)化

如果要將string直接轉(zhuǎn)換為const char*類型,可以使用兩個(gè)函數(shù)。

1、c_str()

string s="abcd";
const char*ch=s.c_str();

c_str()函數(shù)返回一個(gè)指向正規(guī)C字符串的指針,內(nèi)容與string相同,因?yàn)镃本身沒有string類。但是,上面這種用法很不安全,因?yàn)閏h最后指向的內(nèi)容是垃圾值,s對象被析構(gòu)了。而且c_str()返回的是一個(gè)臨時(shí)指針,不能對其進(jìn)行操作。

2、strcpy()

通過strcpy函數(shù)來進(jìn)行轉(zhuǎn)換是安全的:

char ch[20];
string s="abcd";
strcpy(ch,s.c_str());

3、data()

string s="abcd";
const char*ch=s.data();
  • 那c_str()和data()有什么區(qū)別呢?
  • c_str()會在數(shù)據(jù)的末尾添加’\0’結(jié)束符,多數(shù)用于使用字符串場合。
  • 而data()函數(shù)不會添加’\0’結(jié)束符。

4、如果要轉(zhuǎn)換為char而非const char類型

string s="abcd";
char *ch;
ch=(char*)malloc((s.length())*sizeof(char));
s.copy(ch,s.length(),0);//把當(dāng)前串中以0開始的s.length()個(gè)字符拷貝到以ch為起始位置的字符數(shù)組中,返回實(shí)際拷貝的數(shù)目
cout<<ch;

5、通過str[i]的方式取值的類型

string s = "abcd";
cout << typeid(s[1]).name() << endl; //char
我測試輸出  c.

六、總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳細(xì)分析c++ const 指針與指向const的指針

    詳細(xì)分析c++ const 指針與指向const的指針

    這篇文章主要介紹了c++ const 指針與指向const的指針的相關(guān)資料,文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • OpenCV實(shí)現(xiàn)馬賽克和毛玻璃濾鏡效果

    OpenCV實(shí)現(xiàn)馬賽克和毛玻璃濾鏡效果

    這篇文章主要為大家詳細(xì)介紹了OpenCV實(shí)現(xiàn)馬賽克和毛玻璃濾鏡效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • qtcreater配置opencv遇到的坑及實(shí)踐記錄

    qtcreater配置opencv遇到的坑及實(shí)踐記錄

    我配置opencv不管是按照網(wǎng)上的教程還是deep seek發(fā)現(xiàn)都有些問題,下面是我的配置方法以及實(shí)踐成功的心得,感興趣的朋友跟隨小編一起看看吧
    2025-05-05
  • C++逐步介紹日期類的使用

    C++逐步介紹日期類的使用

    下面小編就為大家?guī)硪黄狢++實(shí)現(xiàn)日期類(Date類)的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2022-07-07
  • C語言volatile關(guān)鍵字的作用與示例

    C語言volatile關(guān)鍵字的作用與示例

    這篇文章主要介紹了C語言volatile關(guān)鍵字的作用,volatile提醒編譯器它后面所定義的變量隨時(shí)都有可能改變,因此編譯后的程序每次需要存儲或讀取這個(gè)變量的時(shí)候,都會直接從變量地址中讀取數(shù)據(jù)
    2023-04-04
  • 從匯編看c++中函數(shù)里面的static關(guān)鍵字的使用說明

    從匯編看c++中函數(shù)里面的static關(guān)鍵字的使用說明

    c++中的static關(guān)鍵字使得函數(shù)里面的局部變量的存活期不在局限于函數(shù)里面,而是變?yōu)樵谡麄€(gè)程序生命期里面都有效
    2013-05-05
  • C++遍歷某個(gè)文件夾下面的子文件夾及其所有文件

    C++遍歷某個(gè)文件夾下面的子文件夾及其所有文件

    這篇文章主要介紹了C++獲取某個(gè)文件夾下面的子文件夾及其所有文件,需要的朋友可以參考下
    2021-07-07
  • 詳細(xì)理解函C語言的函數(shù)棧幀

    詳細(xì)理解函C語言的函數(shù)棧幀

    這篇文章主要為大家介紹了C語言的函數(shù)棧幀,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助,希望能夠給你帶來幫助
    2021-11-11
  • C語言常見排序算法之交換排序(冒泡排序,快速排序)

    C語言常見排序算法之交換排序(冒泡排序,快速排序)

    這篇文章主要介紹了C語言常見排序算法之交換排序(冒泡排序,快速排序),冒泡排序即Bubble?Sort,類似于水中冒泡,較大的數(shù)沉下去,較小的數(shù)慢慢冒起來,假設(shè)從小到大,即為較大的數(shù)慢慢往后排,較小的數(shù)慢慢往前排
    2022-07-07
  • C++遞歸實(shí)現(xiàn)選擇排序算法

    C++遞歸實(shí)現(xiàn)選擇排序算法

    大家好,本篇文章主要講的是C++遞歸實(shí)現(xiàn)選擇排序算法,感興趣的同學(xué)趕快來看一看吧對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12

最新評論

南部县| 陆良县| 缙云县| 阿荣旗| 通许县| 贵州省| 社会| 枣阳市| 房产| 项城市| 河北省| 迁安市| 土默特左旗| 林州市| 永吉县| 屯昌县| 出国| 美姑县| 班玛县| 邵东县| 舒兰市| 当雄县| 墨竹工卡县| 沂水县| 阿克陶县| 武功县| 韶关市| 施甸县| 孝义市| 巢湖市| 周至县| 东乡县| 乌鲁木齐市| 梅州市| 阿拉善左旗| 昌吉市| 安乡县| 遂昌县| 屯昌县| 灌阳县| 齐河县|