string的简单应用入门

string字符串

文章目录

  • string字符串
    • string字符串声明
      • string字符串的遍历
    • 字符串操作函数
      • 运算符
      • 其他操作字符串用到的成员函数
        • string的长度
        • 交换两个字符串的内容
        • 返回字符串的首尾地址
          • 利用首尾地址给字符串排序
        • 插入字符
          • 在尾部插入字符
          • 在指定位置插入字符
        • 拼接字符串
        • 删除字符串
          • 删除某一部分
          • 清空字符串
        • 字符串替换
        • 查找——重中之重

头文件: #include
是区别于用char定义的另一种字符串,相对于char,具有功能更丰富的自带函数。 string相当于一个系统自带的类,它的声明、自带函数可以理解为类的构造函数和成员函数。

string字符串声明

最简单粗暴的定义形式:

string str;

定义一个名为str的空字符串,不需要设置长度,系统会根据字符串的内容自行分配空间,并跟随其长度的改变而改变。它是个类,自然可以有构造函数,所以出了最简单粗暴的定义外,它还可以使用系统自带的构造函数进行花里胡哨的定义:

string s1(str);//调用拷贝构造函数,以字符串str为模版,创建新的字符串s1
string s2(str,start);//用字符串str内,从start开始往后的部分,作为字符串s2的初始值
string s3(str,start,len);//用str内从start开始往后长度为len的部分,作为字符串s3的初始值
string s4(charstr,len);//用char型字符串的前len个字符作为字符串s4的初始值
string s5(num,c);//生成一个含有num个字符c的字符串

例如:

#include 
#include 
using namespace std;
int main(){
    string str="0123456789";//模版
    
    string s1(str);//这里的str换成char字符串也可以
    string s2(str,3);
    string s3(str,3,5);
    
    char ch[100]="abcdef";
    string s4(ch,3);
    
    string s5(5,'6');//注意,第二个变量是"字符",需要用单引号

    cout<<s1<<endl;
    cout<<s2<<endl;
    cout<<s3<<endl;
    cout<<s4<<endl;
    cout<<s5<<endl;
    return 0;
}

输出:

0123456789 //s1
3456789 //s2
34567 //s3
abc //s4
66666 //s5

string字符串的遍历

下标法迭代器法两种,我觉得暂时不需要掌握迭代器,下表法在现阶段完全够用。

所谓下标法,就是跟char字符串和数组那样,用[]来调用单个元素

string s="0123456";
cout<<s[3];

输出

3

在后面的“string长度”中,会见到一个重要成员函数size(),有关下标法和size()的共同使用可参照那一部分的示例。

字符串操作函数

运算符

相比于char字符串,string字符串的一个显著优势就是可以直接使用运算符号,相当于string类在声明时重载了运算符。

支持如下运算符:

  • =赋值符(注意不是等号!)
  • +=在字符串后接新内容
  • +串联字符串
  • ==``!=判断两个字符串是否完全一致
  • <``>``<=``>=以字典序依次比较两个字符串
  • >>``<<直接输入、输出

其他操作字符串用到的成员函数

以下成员函数均在头文件内,使用.调用

string的长度

用成员函数size();``length();来返回string字符串的字符个数,两个成员函数具有几乎相同的效果,作用相当于char字符串的strlen(str);,常出现在for循环的第二个条件里。

比如,如果想把一个字符串中的大写字母全变为小写字母:

string s="aAbBcCdD";
for(int i=0;i<s.size();i++) //用到s.size();表示字符串长度
    if(s[i]>='A'&&s[i]<='Z')
        s[i]+=('a'-'A');
cout<<s;

输出:

aabbccdd

交换两个字符串的内容

用成员函数swap(str1,str2)交换两个字符串的内容
例如:

string s1="123",s2="abc";
swap(s1,s2);
cout<<s1;

输出:

abc

返回字符串的首尾地址

用成员函数begin()返回字符串的首地址
用成员函数end()返回成员尾地址的后一位

string s="012345";
cout<<s.end()-s.begin();

输出

6
利用首尾地址给字符串排序

如果给出一个乱序字符串,要求按照字典序排列:

string s="ajxltbyqkwltrbfy"; //爱就像蓝天白云晴空万里突然暴风雨
sort(s.begin(),s.end()); //借助sort进行排序
cout<<s;

输出:

abbfjkllqrttwxyy

对sort函数不熟悉的同学可以参考我的另一片博客:
sort排序函数入门用法

插入字符

在尾部插入字符

用成员函数push_back(c);将单个字符c插入到字符串尾端,也可以用+=实现一样的作用

例如

string s="abc";
s.push_back('d'); //s=abcd
s+='e'; //s=abcde
cout<<s;

输出

abcde
在指定位置插入字符

用成员函数insert(pos,c);在指定位置pos的前面插入字符c

例如

string s="12345";
s.insert(s.begin()+1,'w');
cout<<s;

输出

1w2345

ps.趁机加深理解一下上面的end()

string s="12345";
s.insert(s.end(),'w');
cout<<s;

输出

12345w

可以明确的看出,如果s.end()指向的位置是最后一个字符5,那么按照insert()的规则,w应该出现在45之间。

拼接字符串

使用成员函数append(str)向已有的字符串后拼接新的字符串,效果与+=相同

例如

string s="520";
s.append("13"); //s=52013
s+="14"; //s=5201314
cout<<s;

输出

5201314

删除字符串

删除某一部分

使用erase()来删除字符串中的某一特定部分:

  • erase(pos)删除某一位置的字符
  • erase(start,end)删除[start,end)之间的全部字符
  • erase(pos,len)删除从pos开始往后的len个字符
string s="0w12345678";
s.erase(s.begin()+1); //s=012345678
s.erase(1,3); //s=045678
s.erase(s.begin()+1,s.end()-2); //s=078
清空字符串

使用clear()来快速清空整个字符串

s.clear(); //s被清空

字符串替换

replace()实现字符串指定位置的部分替换

  • replace(pos,n,str) 将字符串从pos开始往后的n个字符替换为字符串str,字符串str的长度不一定为n
  • replace(pos,n,m,c) 将字符串从pos开始往后的n个字符替换为m个字符c,m和n不一定相等
  • replace(start,end,str) 将字符串[start,end)之间的部分替换为字符串str
string s="I hate you.";
s.replace(2,4,"love");
cout<<s<<endl;
s.replace(s.begin()+1,s.begin()+2," don't ");
cout<<s<<endl;
s.replace(0,s.size(),3,'h');
cout<<s;

输出:

I love you.
I don't love you.
hhh

查找——重中之重

在字符串中,按照一定的顺序(正向/反向)查找某一字符/字符串

  • find(str,pos) 从pos开始,查找字符串str(可以是一个字符),返回找到的位置(下标),如果没找到则返回-1,pos的默认值为0

  • rfind(str,pos) 从pos开始,反向查找字符串str(可以是一个字符),返回找到的位置(下标),如果没找到则返回-1,pos的默认值为npos,即从最后开始找

string s="ooo0ooo0ooo";
cout<<s.find('0')<<endl; //第一个0,下标3
cout<<s.rfind('0'); //倒着找的第一个0,下标7

输出:

3
7

还有好几个不算太常用的查找函数,比如:

  • find_first_of(str,pos) 查找第一个属于str字符串的字符
  • find_first_not_of(str,pos) 查找第一个不属于str字符串的字符
  • find_last_of(str,pos) 查找最后一个属于str的字符
  • find_last_not_of(str,pos) 查找最后一个不属于str的字符
string str="1234567890"; //数字
string s="aaa666aaa";
cout<<s.find_first_of(str)<<endl; //第一个数字,下标为3
cout<<s.find_first_not_of(str)<<endl; //第一个非数字,下标0
cout<<s.find_last_of(str)<<endl; //最后一个数字,下标5
cout<<s.find_last_not_of(str); //最后一个非数字,下标8

输出

3
0
5
8

你可能感兴趣的:(string的简单应用入门)