二、String基本字符系列向量容器——删除添加替换查找比较

简介在C语言中只提供了一个char类型来处理字符,而对于字符串只能通过字符串数组处理,有些不太方便。C++STL提供了string基本字符系列容器来处理字符串,可以把string理解为字符串类,它提供有删除、添加、替换、查找、比较等方法。

一. String向量容器的用法

  1. 使用string容器,需要头文件#include<string> ”
  2. 创建string对象  string s;
  3. 给string对象复制(两种方法)
    • string s; s=”hello”;//直接给字符串赋值
    • string s;                 /*

                  char a[100];             .

                  scanf(“%s”,&ss);    .

                  s=ss;                       */把字符指针赋给一个字符串对象(比较常用)

二. String常用函数方法总结:

getline(cin,s); // 输入一行字符串

getline(cin,s,c); // 输入到字符c为止的字符串

a+b; // 将字符串b连接到字符串a之后

s.begin(); // 返回字符串s的起始地址

s.end(); // 返回字符串s的结束地址

s.size(); // 返回字符串s的长度

s.length(); // 返回字符串s的长度

s.empty(); // 字符串a为空返回true;否则返回false

s.compare(b); // 比较字符串s,b;s大,返回1;b大,返回-1;相等,返回0

reverse(s.begin(),s.end()); // 将字符串s从首到尾反向排列

printf(s.c_str()); // 用c_str()方法将字符串s用printf输出

s.erase(p); // 清除地址p的一个字符

s.erase(p,n); // 清除从地址p开始的n个字符

s.erase(p,q); // 清除从地址p开始到地址q结束的字符

s.insert(n,a); // 在字符串s第n个位置插入字符串a

s.insert(n,a,m); // 在字符串s第n个位置插入字符串a的前m个字符

s.insert(n,m,c); // 在字符串s第n个位置插入m个字符c

s.replace(m,n,a); // 将字符串s第m个位置开始往后的n个字符替换为字符串a

s.replace(m,n,s,x,y); // 替换为字符串s中第x个位置开始往后的y个字符

s.replace(m,n,s,n); // 替换为字符串s的前n个字符

s.replace(m,n,x,c); // 替换为x个字符c

s.find(c); // 返回a中第一次出现字符c的位置

s.rfind(c); // 返回a中最后一次出现字符c的位置

stoi(s); // 字符串s转换为int类型

stol(s); // 字符串s转换为long int类型

stoul(s); // 字符串s转换为unsigned long int类型

stoll(s); // 字符串s转换为long long int类型

stoul(s); // 字符串s转换为unsigned long long int类型

stof(s); // 字符串s转换为float类型

stod(s); // 字符串s转换为double类型

stold(s); // 字符串s转换为long double类型

 

1.在string对象尾部添加字符

       

在string对象的尾部添加一个字符(char),可用“+”。

#include<string>

#include<iostream>

using namespace std;

int main()

{

  string s;

  s=s+'a';

  s=s+'b';

  s=s+'c';

  s=s+'1';

  cout<<s<<endl;

  return 0;

}

结果如下:

2.在string对象尾部追加字符串

 

     有两种方式:1,直接用“+”;2,用append()方法。:用append()比直接加更高效,运算更快。因为每次使用“+”,都是重新建立了一个string对象,而append(),是直接在原有的对象上进行操作。

#include<string>

#include<iostream>

using namespace std;

int main()

{

  string s,n,m,p;

 

  s="abc";

  s=s+"123";

 

  n.append("xyz");

  n.append("789");

 

  m.append(n+"456");

 

  p.append(s+n);

 

  cout<<s<<endl;

  cout<<n<<endl;

  cout<<m<<endl;

  cout<<p<<endl;

  return 0;

}

结果如下:

3.插入字符与删除string中的元素

 

使用insert()把字符插入到迭代器位置之前。

使用erase()删除迭代器所指的元素或一个区间中的所有元素。

清空一个字符串,可以直接给它赋空字符串。

#include<string>

#include<iostream>

using namespace std;

int main()

{

  string s,n,m,p;

 

  s="123456";

 

  cout<<s[0]<<endl;//输出string中的首元素

  cout<<s[0]-'1'<<endl;//两个相同的字符相减值为0

 

  string::iterator it;//定义迭代器变量it

 

  it=s.begin();      //迭代器位置为字符串首

 

  s.insert(it+1,'a');//将字符串'a'插入到第一个字符前(注:字符位置从0开始计数)

  cout<<s<<endl;

 

  s.erase(it+4);//删除第四个元素,即下标为4的元素。(注:下标从0开始,下同)

  cout<<s<<endl;

 

  s.erase(it,it+4);//删除0~4区间里的元素,即1,a,2,3

  cout<<s<<endl;

 

  s="";//清空字符串

  cout<<s.length()<<endl;//输出字符串的长度

 

  return 0;

}

结果如下:

4.替换与搜索string对象的元素或字符串

 

使用replace()可以替换string对象中的字符。

使用find()可以查找字符串中的第一个字符元素(用单引号界定)或者子串(用双引号界定)。

empty()可以判断字符串是否为空,如果为空,则返回逻辑真,即1;否则,返回逻辑假,即0。

#include<string>

#include<iostream>

using namespace std;

int main()

{

  string s,n;

  s="123456";

 

  s.replace(3,2,"aaa");//从第3个开始,连续2个字符替换为“aaa”

  cout<<s<<endl;

 

  n="app cpp all";

 

  cout<<n.find('a')<<endl;//查找第一个字符‘a’;返回下标值

  cout<<n.find("a")<<endl;//查找第一个子串“a”;返回下标值

  cout<<n.find("app")<<endl;//查找第一个子串“app”;返回下标值

  cout<<n.find("cpp")<<endl;//查找第一个子串“cpp”;返回下标值

  cout<<n.find("ddd")<<endl;//找不到子串“ddd”;返回4294967295

  cout<<"判断字符串是否为空:"<<s.empty()<<endl;//判断字符串是否为空,不为空返回0

  s="";//清空字符串

  cout<<endl;

  cout<<"清空字符串后:"<<s.empty()<<endl;//为空返回1

 

  return 0;

}

结果如下:

5.reverse反向排序

 

用reverse可以将string容器迭代器所指向的一段区间中元素(字符)反向排序。

使用reserve()需要声明头文件“#include<algorithm>”。

#include<string>

#include<iostream>

#include<algorithm>//reverse需要此头文件声明

using namespace std;

int main()

{

  string s;

  s="123456789";

 

  reverse(s.begin(),s.end ());//123456789反向排序

  cout<<s<<endl;

 

  reverse(s.begin(),s.begin()+4);//987654321中的9876区间反向排序

  cout<<s<<endl;

  return 0;

}

   结果如下:

6.compare()比较

    使用compare()与其他字符串比较大小,如果它比对方大,则返回1;如果它比对方小,则返回-1;如果相同,则返回0;(:按照ASCLL码表的顺序对字符串从前到后依次比较,字符顺序大的那个字符串较大)

#include<string>

#include<iostream>

using namespace std;

int main()

{

        string s;

        s="abcd";

        cout<<s.compare("abc")<<endl;//s"abc"字符串大,返回1

        cout<<s.compare("abcd")<<endl;//s"abcd"字符串相等,返回0

        cout<<s.compare("abce")<<endl;//s"abce"字符串小,返回-1

        cout<<s.compare("z")<<endl;//s"z"字符串小,返回-1

        return 0;

}

结果如下:

7.String对象与字符数组相互操作

#include<string>

#include<iostream>

using namespace std;

int main()

{

        string s;

        char a[100];

        printf("输入一个字符串: ");

        scanf("%s",&a);

        s=a;//将字符数组赋值给字符串

        printf(s.c_str());//printf输出字符串,需要用“c_str()”

        cout<<endl;

        printf("%s\n",a);//printf输出字符数组

    cout<<s<<endl;//cout输出字符串

        cout<<a<<endl;//cout输出字符数组

        return 0;

}

结果如下:

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值