小白笔记
前言
string 在cpp中相当于一个字符串类,类里面的是char*,类里所维护的是一个字符串。
一、string 字符串赋值
string 字符串赋值
string()无参构造函数,string str = 字符串;string(const *char)有参构造函数,直接赋值相当于;string(const string &str)使用一个string对象初始化另一个string对象
另一个字符串赋值的assign函数
string str ; str.assign(const char* c )把某个字符串赋值给str
string str ; str.assign(const char *c , int n )把某个字符串前n个字符赋值给当前字符串
string str ; str.assign(const string & s ) 把某string类型的字符串赋值给str
string str ; str.assign(int n , char c)给str字符串输入n个c字符进行赋值
二、string 字符串的拼接
string 字符串的拼接
string+= (字符串)+=(字符)+=(string类型的字符串)直接在后面添加,相当于字符串长度增加,在后面添加
另一个字符串拼接的append函数
string str ; str.append(const char *s)把字符串添到str结尾
string str ; str.append(const char *s , int n )把字符串s前n个字符添到str结尾
string str ; str.append(const string &s)把string类型的字符串添到str的结尾(效果同str+=s)
string str ; str.append(const string &s , int pos , int n )把string类型的字符串从pos这个下标开始的n个字符添到str的结尾
三、string 查找和替换
string 查找和替换
find函数,会返回一个整型值(返回下标位置)rfind从后面进行查找,同样返回一个整型值
find(const string& str , int pos = 0 )const,查找str在字符串中第一次出现的位置,从pos开始进行查找;rfind(const string& str , int pos = npos )const,是从字符串后往前进行查找,即str最后一次出现的位置,从pos开始进行查找,这里pos相当于字符串末端
例子
string str1 ="abcdeabcde" ; string str2 = "ab"; int pos1 = str1.find(str2); int pos2 = str1.rfind(str2);
那么pos1值就是0,pos2值就是5
find(const char*s , int pos = 0 )const,rfind(const char*s , int pos = npos )const与上面意思相同
find(const char c , int pos = 0 )const,rfind(const char c , int pos = npos )const与上面的意思相同,就是查找里面的字符串变成了查找里面的字符了
find(const char*s , int pos , int n )const,意思是从pos处往后查找,从原字符串进行查找字符串s前n个字符,rfind(const char*s , int pos , int n )const,意思是从pos往前查找,从原字符串进行查找字符串s前n个字符
replace函数replace(int pos , int n , const string &str)(其中string& str 可以换成char* s一个意思)
该函数功能是把目标字符串从下标pos位置开始,n个字符,替换成字符串str(或s)
例如
string str = "abcdef" ; str.replace(1,3,"1111");cout<<str<<endl;
刚开始学的时候确实很琢磨是替换了三个1还是替换了四个1,这个时候记住定义,把原来的字符串从下标pos位置开始,n个字符全部替换成要求的字符串,就是从b开始,bcd全部被替换成了1111,所以Output是a1111ef
四、string 字符串比较(挨个字符的ASCLL码来进行对比)
string 字符串比较(挨个字符的ASCLL码来进行对比)
compare函数,返回一个整型数值,compare函数是字符串之间进行比较,按字符的ASCLL码来进行挨个比较,int compare(const string &s)const与字符串s进行比较(其中string& s可以换成char* s一个意思)
如果原字符串与字符串s相等,则返回0
如果原字符串与字符串s大,则返回1
如果原字符串与字符串s小,则返回-1
判断的依据是挨个字符进行ASCLL码来进行比较,若有差异则直接返回
例如
string str1 = "c";string str2 = "aaaaa";cout<<str1.compare(str2)<<endl;
Output是1
五、string 字符存取
string 字符存取
通过[]来访问或者修改单个字符
string str = "hello"; for(int i = 0 ; i < str.size();i++) cout<<str[i]<<" "; cout<<endl;
str[0] = 'x';cout<<"str = "<<str<<endl;
Output:
h e l l o
xello
通过at方式来进行单个字符的访问或者修改
string str = "hello";for( int i = 0 ; i < str.size();i++)cout<<str.at(i)<<" ";cout<<endl;
str.at(1) = 'x';cout<<"str = "<<str<<endl;
Output:
h e l l o
hxllo
六、string插入和删除
string插入和删除
insert函数,来进行插入
string& insert(int pos,const char*s);在下标为pos处与下标为pos-1处之间,插入字符串(其中char*s 和string& str都是字符串的意思)
例如
string str1 = "abcdefg";str1.insert(2,"haha");cout<<str1<<endl;
Output:
abhahacdefg
string& insert(int pos , int n , char c);在下标为pos处插入n个字符c
erase函数,来进行删除
string& erase(int pos, int n = npos);删除从下标为pos开始的n个字符
例如
string str2 = "abcdefg"; str2.erase(2,2);cout<<str2<<endl;
Output:
abefg
七、string子串
string子串
string substr(int pos = 0 , int n = npos)const;返回由pos开始的n个字符组成的字符串(包括下标为pos的字符),那么从零开始的话就是截取到下标为n-1的字符
例如(生活实例)
string str = "1308u103@wanfo.com";//假设邮箱
int pos = str.find('@');
string userName = str.substr(0,pos);
cout<<userName<<endl;
Output:
1308u103
八、string长度
string长度
可以用size()和length()来进行判断长度
两者在string中没有任何区别
string str = "abcde";int a = str.size();int b = str.length();结果是a=b
在正常情况下,一般来说size()一般用作返回容器大小的方法,length()一般用作返回一个序列的长度