1.string類簡(jiǎn)介
string是C++編程語(yǔ)言中的字符串。在C++中字符串處理可以使用c語(yǔ)言字符串形式char *,也可以使用string類格式。
string 是一個(gè)類,類內(nèi)有char *指針,通過(guò)容器方式管理字符串。使用string類型需要需要包含頭文件string。
2.string類的構(gòu)造函數(shù)
string類提供了多種構(gòu)造函數(shù),支持無(wú)參構(gòu)造、有參構(gòu)造、拷貝構(gòu)造。
無(wú)參構(gòu)造:
string()
有參構(gòu)造:string(const char *str);
拷貝構(gòu)造
:string(const string &str);
初始化字符串為count個(gè)c字符:string(int count,char c);
使用示例:
#include
#include
using namespace std;
void test()
{
string s1;//默認(rèn)構(gòu)造,即無(wú)參構(gòu)造函數(shù)
char const* str = "hello,world";//c語(yǔ)言字符穿
string s2(str);//傳入C語(yǔ)言字符串
cout < "s2="
3.string類賦值相關(guān)函數(shù)
string類中提供"="運(yùn)算符重載和assign全局函數(shù)進(jìn)行賦值操。這兩種方式均有多個(gè)重載版本,如下所示:
string字符串賦值
string &operator=(const char *s);//將c字符串賦給string
string &operator=(const string &s);//將s賦值給string
string &operator=(char c);//將字符c賦給string
//全局函數(shù)
string &assign(const char *s);//將c字符串賦給string
string &assign(const char *s,int n);//將c字符串前n個(gè)賦給string
string &assign(const string &s);//將s賦給string
string &assign(int n,char c);//將n個(gè)c賦給string
使用示例:
#include
using namespace std;
#include
void test()
{
string s1="hello,world";//c語(yǔ)言字符串賦值
cout < "s1=" < s1 < endl;
string s2 = s1;//將s1賦給s2
cout < "s2=" < s2 < endl;
string s3 ;//單個(gè)字符賦給string
s3 = 'c';
cout <"s3="
4.string類字符串拼接
4.string類字符串拼接
string類中字符串拼接有重載"+="運(yùn)算和全局函數(shù)append方式,均有多種重載版本。
運(yùn)算符重載
string &operator+=(const char *s);////將s追加到string
string &operator+=(const string &str);//將str追加到string
string &operator+=(const char c);//將字符c追加到string
全局函數(shù)append
string &append(const char *s);//將s追加到string
string &append(const char *s,int n);//將s的前n個(gè)追加到string
string &append(const string &str);//等價(jià)于operator+=(const string &str)
string &append(const string &str,int pos,int n); --從str的第pos位置開(kāi)始,取出n個(gè)字符追加到string中
使用示例:
void test()
{
//+=運(yùn)算符重載示例
string s1 = "C++";
s1 += "學(xué)習(xí)";
s1 += ',';
cout < "s1=" < s1 < endl;
string s2 = "學(xué)習(xí)使我快樂(lè)!";
s1 += s2;
cout < "s1=" < s1 < endl;
//append示例
string s3;
s3 = "C++";
s3.append("學(xué)習(xí)");
s3.append(s2,4);//從s2的第4個(gè)字符開(kāi)始,將s2的字符拼接到s3
cout < "s3=" < s3 < endl;
s3.append(s2, 4,4);
cout < "s3=" < s3 < endl;//從s2的第4個(gè)字符開(kāi)始,將s2的接下來(lái)4個(gè)字符拼接到s3
s3.append("月入過(guò)萬(wàn)!");
cout < "s3=" < s3 < endl;
s3.append("我的未來(lái)不是夢(mèng)",4,10);//從第4個(gè)位置開(kāi)始截取10個(gè)字符拼接到s3
cout < "s3=" < s3 < endl;
}
int main()
{
test();
system("pause");
}
5.字符串查找與替換
5.字符串查找與替換
string字符串查找有find、rfind函數(shù)。其中find函數(shù)是從左往右查找,查找成功返回第一個(gè)出現(xiàn)的下標(biāo),失敗返回-1;rfind是查找最后一個(gè)出現(xiàn)的下標(biāo),失敗返回-1。 replace函數(shù)實(shí)現(xiàn)字符串替換。
//find函數(shù):從左往右查找
返回值:查找成功返回出現(xiàn)的位置,失敗返回-1
int find(const string&str,int pos=0)const;//形參pos表示開(kāi)始查找的起始位置
int find(const char *str,int pos=0)const;
int find(const char *str,int pos=0,int n)const;//從str的第pos開(kāi)始的前n個(gè)字符中str出現(xiàn)的位置
int find(const char c,int pos=0);//查找字符c
//rfind函數(shù):從右往左查找
int rfind(const string &str,int pos=npos);從pos位置開(kāi)始查找str最后一次出現(xiàn)的位置
int rfind(const char *str,int pos=npos);從pos位置開(kāi)始查找str最后一次出現(xiàn)的位置
int rfind(const char *str,int pos=pos,int n);從pos開(kāi)始的前n個(gè)字符中str最后一次出現(xiàn)的位置
int rfind(const char c,int pos=0);//查找c最后一次出現(xiàn)的位置
//字符串替換
string &replace(int pos,int n,const string &s);//將字符串的第pos位置開(kāi)始的n個(gè)字符替換成s
string &replace(int pos,int n,const char *s);
使用示例:
#include
#include
using namespace std;
void test()
{
string str = "1asd3as456asd4789asd";
int pos = str.find("asd");//查找asd第一次出現(xiàn)的位置
cout < "pos=" < pos < endl;
string temp = "asd";
pos = str.find(temp,7);//從第7個(gè)位置開(kāi)始查找asd出現(xiàn)的位置
cout < "pos=" < pos < endl;
pos = str.rfind(temp);//查找最后一次出現(xiàn)的位置
cout < "pos=" < pos < endl;
pos = str.rfind("asd",7,2);//從第3個(gè)位置開(kāi)始往前查找,查找"asd"中的前2個(gè)字符在str中最后一次位置
cout < "pos=" < pos < endl;
//字符串替換
str.replace(1, 7, "c++");//從第一個(gè)位值開(kāi)始將str的7個(gè)字符替換為c++
cout < "str=" < str < endl;
}
int main()
{
test();
system("pause");
}
6.字符串比較
6.字符串比較
string類中字符串比較函compare數(shù)由多個(gè)重載版本,既可以和C語(yǔ)言風(fēng)格const char *字符串進(jìn)行比較,也可以和string類字符串進(jìn)行比較。相等返回0,不相等返回!0值。
字符串比較:
int compare(const char *str);//相等返回0,否則返回非0值
//比較string的len個(gè)字符,從idx位置開(kāi)始
int string::compare (size_type idx, size_type len, const string& str) const
//從指定位置指定長(zhǎng)度開(kāi)始比較
int string::compare (size_type idx, size_type len, const string&str, size_type str_idx, size_type str_len) const
使用示例:
#include
using namespace std;
#include
void test()
{
string str1 = "hello,world";
if (str1 == "hello,world")
{
cout < "[const char *]相等" < endl;
}
string str2 = "hello,world";
if (str1 == str2)
{
cout < "[string]相等" < endl;
}
if (!str1.compare("hello,world"))
{
cout < "[compare]相等" < endl;
}
//比較str1的前6個(gè)字符
int ret=str1.compare(0,6,"hello,");
cout < "ret=" < ret < endl;
//從str1的第0個(gè)開(kāi)始開(kāi)始取出6個(gè)字符,
//從"c++,hello,"的第4個(gè)位置開(kāi)始,取出6個(gè)字符進(jìn)行比較
ret = str1.compare(0, 6, "c++,hello,", 4, 6);
cout < "ret=" < ret < endl;
}
int main()
{
test();
system("pause");
}
7.string字符串以字符方式讀寫(xiě)
7.string字符串以字符方式讀寫(xiě)
string類字符串使用字符方式訪問(wèn),可以使用重載"[]"版本函數(shù),即可以和C語(yǔ)言中訪問(wèn)方式一樣,也可以使用函數(shù)at來(lái)訪問(wèn)。
string類中對(duì)于字符串的長(zhǎng)度獲取,可以使用size()函數(shù)或者length()函數(shù)來(lái)實(shí)現(xiàn)。
string以字符方式訪問(wèn)
char &operator[](int n);
char &at(int n);
string 中獲取字符串長(zhǎng)度
str.size();
str.length();
使用示例:
#include
#include
using namespace std;
void test()
{
string str = "hello,world";
cout < "str長(zhǎng)度:" < str.size() < endl;
cout < "str長(zhǎng)度:" < str.length() < endl;
//修改成員
for (int i = 0; i < str.size(); i++)
{
str[i] = i+'0';
}
//遍歷
for (int i = 0; i < str.size(); i++)
{
cout < str.at(i) < " ";
}
cout < endl;
}
int main()
{
test();
system("pause");
}
8.string字符串的插入與刪除
8.string字符串的插入與刪除
string類中插入函數(shù)insert支持多種插入方式,有多個(gè)重載版本。
字符串刪除可以使用erease函數(shù)實(shí)現(xiàn)。
c++插入:
string& insert(int pos,const char *s);//從第pos位置開(kāi)始插入s
string& insert(int pos,const string &s);
string &insert(int p0, const char *s, int n);//從p0位置開(kāi)始插入s,插入的s連續(xù)n個(gè)字符
string &insert(int p0,const string &s, int pos, int n);//從p0位置開(kāi)始插入s,插入的s從pos開(kāi)始,連續(xù)n個(gè)字符
string &insert(int p0, int n, char c);//從p0處插入n個(gè)字符c
c++刪除字符串
string &erase(int pos,int n=npos);//從pos位置開(kāi)始刪除n個(gè)字符
使用示例:
#include
#include
using namespace std;
void test()
{
string str = "hello,";
str.insert(2,"aaa");//從第2個(gè)位置開(kāi)始插入aaa
cout < "str=" < str < endl;
str.insert(4, "1234", 1, 2);//從第4個(gè)位置插入,從"1234"的第1個(gè)位置開(kāi)始,練習(xí)兩個(gè)字符插入到str中
cout < "str=" < str < endl;
//字符串刪除
str.erase(2,4);//從第2個(gè)位置開(kāi)始,刪除4個(gè)字符
cout < "str=" < str < endl;
str.erase();//清空字符串
cout < "str=" < str <"t長(zhǎng)度:"()
9.子字符串提取
9.子字符串提取
string類中對(duì)于子字符串的提取,可以使用函數(shù)substr實(shí)現(xiàn)。
判斷string類字符串是否為空,即長(zhǎng)度是否為0可以使用empty函數(shù)實(shí)現(xiàn)。
子字符串提取
string substr(int pos=0,int n=npos)const;//從pos位置提取n個(gè)子字符
//判斷字符串是否為空
bool empty();
使用示例:
10.string類轉(zhuǎn)換為char *
10.string類轉(zhuǎn)換為char *
將string字符串轉(zhuǎn)換為char *字符串,可以使用c_str函數(shù)實(shí)現(xiàn)。
const char *c_str();
const char *data();
在c11版本之后,這兩個(gè)函數(shù)功能一致,都是將string類型字符串轉(zhuǎn)換成char *,返回一個(gè)char *字符串,以'?'結(jié)尾。
使用示例:
#include
#include
using namespace std;
int main()
{
string str = "hello,world";
const char* p = str.c_str();
cout < "p=" < p < endl;
p = str.data();
cout < "p=" < p < endl;
system("pause");
}
審核編輯:湯梓紅
-
編程語(yǔ)言
+關(guān)注
關(guān)注
10文章
1929瀏覽量
34539 -
字符串
+關(guān)注
關(guān)注
1文章
575瀏覽量
20468 -
C++
+關(guān)注
關(guān)注
21文章
2100瀏覽量
73453 -
string
+關(guān)注
關(guān)注
0文章
40瀏覽量
4715
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論