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