新手學(xué)做網(wǎng)站編程微信搜一搜seo
在c++中,string本質(zhì)上是一個類;
string與char *有些區(qū)別:
- char*是一個指針;
- string是一個類,類內(nèi)封裝了char*,管理這一個字符串,是一個char*的容器
在使用string類型時,要加上其頭文件
string的初始化操作
string str1;
最直接的初始化,一定要記住;
后面幾種了解就ok了
第二種:
const char* c="hello world!";
string str2(c);
用char*來存儲,存儲的是字符串常量,所以某些編譯器需要加上const,為保持習(xí)慣,建議加上const
第三種:
const char* c="hello world!";
string str2(c);
string str3(str2);
而在輸出字符串的時候可以用字符串變量名+[]來輸出,好似跟字符指針輸出方式一摸一樣
所以我感覺:無論是字符指針還是string類名本質(zhì)是都是字符串首個元素的地址,類似與數(shù)組一樣,所以可以利用數(shù)組的方式進(jìn)行輸出
其實(shí)對于字符串中字符的存取(c++中的字符串)還有一個方法就是調(diào)用at接口
string的賦值:
第一種方式:最常用基本
string str;
str="hello world!"
cout<<str<<endl;
后面的了解下就歐克了
//第二種
str2=str1;//第三種
string str3;
str3='a';//第四種
string str4;
str4.assign("hello world");
//感覺調(diào)用assign這個接口實(shí)在不如等號來的方便//第五種
string str5;
str5.assign("hello world",5);//把前五個字符賦值給str5;
其實(shí)還有更多賦值方法,不過很雞肋,大多用不到,就不多介紹了;
string的拼接:重載+=操作符;append接口
重載+=操作符已經(jīng)封裝在這個類內(nèi)了,我們只需要調(diào)用就歐克了
append接口在這里就不介紹了;
string的查找和替換;
查找:find;替換:rfind;
int find(const string &str,int pos=0) const;查找str第一次出現(xiàn)的位置,從pos開始查找
記住這個是從0開始索引,沒有找到返回-1;
rfind與find區(qū)別:rfind從右往左查找,但返回的值是從左往右計算;
find從左往右查找,返回的值也是從左往右,
其余該查找和替換的函數(shù)的不同參數(shù)就不介紹了,因?yàn)橛貌坏?#xff1b;
string比較;
比較方式是通過ASCII值進(jìn)行比較;
>返回1,=返回0;<返回-1;
int compare(const string& str)const;
int compare(const char*s)const;
?string的插入和刪除;
插入:string& insert(int pos,const char*s);
string& insert(int pos,const string& str);
刪除:string& erase(int pos,int n=pos);
這些函數(shù)原型都超級簡單,手巧幾遍就可以輕松學(xué)會;
?string子串;
函數(shù)原型:string substr(int pos=0,int n=npos)const;返回由pos開始的n個字符組成的字符串
?
第二個參數(shù)可以理解為 從pos初開始的n個字符
?
從下標(biāo)0開始到第三個字符,就是下標(biāo)0是第一個字符,下標(biāo)1是第二個字符,下標(biāo)2是第三個字符,所以只打印abc?
string的兩種輸入方式:
先介紹兩種輸出方式:cin/scanf和兩種輸出方式cout/printf
scanf和printf是格式化輸入輸出,輸入輸出效率高,cin和cout是輸入輸出流,輸入輸出效率低
輸出流之所以慢,是因?yàn)槭且劝演敵龅臇|西放入緩存區(qū)再輸出;
對于字符:cin的輸入忽略空格和回車,scanf("%c",&i)等價于i=getchar(),空格和回車都會被輸入;
下面介紹用cin和scanf輸入字符串:
string s1;
cin>>s1;
?cin可以直接輸入;
const int 10000
string s1;
s1.resize(N);
scanf("%s",&s1[0]);
用scanf輸入就比較麻煩了;首先需要先預(yù)先指定s1的大小,然后需要在scanf的參數(shù)中取首元素地址;但運(yùn)行速度是比cin快的;
?