string对象


C语言只提供了一个char类型用来处理字符,而对于字符串,只能通过字符串数组来处理,显得十分不便。C++STL提供了string基本字符系列容器来处理字符串,可以把string理解为字符串类,它提供了添加、删除、替换、查找和比较等丰富的方法。

虽然使用vector<char>这样的向量也可以处理字符串,但功能比不上string。向量的元素类型可以是string,如vector<string>这样的向量,实际上就类似于C语言中的字符串数组。

使用string容器,需要头文件包含声明“#include <string>”。string文件在C:\Program Files\Microsoft Visual Studio\VC98\Include文件夹中可以找到。


1.创建string对象

int main ()
{
string s;
};

2.给string对象赋值

  • 直接对字符串进行赋值
int main ()
{
string s;
s="hello word";
cout<<s<<endl;
return 0;
}
  • 更常用的方法就是,把一个字符串指针赋给一个字符串对象
int main ()
{
string s;
char ss[100];
//scanf是输入速度比cin块得多
//scanf是c语言的函数,不支持string对象
ss="hello word";
s=ss;
cout<<s<<endl;
return 0;
}

3.从string尾部添加字符

int main ()
{
string s;
s=s+'a';
s=s+'b';
s=s+'c';
cout<<s<<endl;
return 0;
}

4.从string尾部添加字符串

  • 直接使用“+”操作符,代码如下
    s=s+"abd";
s=s+"123";
  • 采用append()方法,代码如下
    s.append("abs");
s.append("123");

5.给string对象插入字符(insert)

int main ()
{
string s;
s="123456";
//定义迭代器
string::iterator it;
//迭代器位置为字符串首
it=s.begin();
//把字符'p'插入到第1个字符前(注意,字符位置是从0开始计数)
s.insert(it+1,'p');
return 0;
}

运行结果

1p23456

6.访问string对象的元素

一般使用下标方式随机访问string对象的元素,下标是从0开始计数的。另外,string对象的元素是一个字符(char),这点一定要清。代码如下:

int main ()
{
string s;
s="123456";
//输出对象的第二个元素
cout<<s[1]<<endl;
//string 里面元素为字符串类型
cout<<s[1]-'0'<<endl;
return 0;
}

7.删除string对象元素

  • 1.清空一个字符串,可以直接对string赋空字符串即可。
  • 2.使用erase()方法删除迭代器所指的按个元素或这个区间中的所有元素。

    代码如下
int main(int argc, char* argv[])
{
string s;
s="abc123456";
//定义迭代器变量,指向字符串对象首元素
string::iterator it=s.begin();
//删除第3个元素,元素位置从0开始计数
s.erase(it+3);
cout<<s<<endl;
//删除0~4区间的所有元素
s.erase(it,it+4);
cout<<s<<endl;
//清空字符串
s="";
//输出字符串的长度
cout<<s.length()<<endl;
return 0;
}

运行结果:

abc23456

3456

0

8.返回string对象的长度(length()

  • 1.length()方法可以返回字符串的长度
  • 2.empth()方法可以判断字符串是否为空
int main ()
{
string s;
s="abcdef";
//输出字符串的长度
cout<<s.length()<<endl;
//清空字符串
s="";
//判断字符串是否为空
cout<<s.empty()<<endl;
return 0;
}

运行结果

9

1

9.替换string对象的字符(replace())

#include <string>
#include <iostream>
using namespace std; int main(int argc, char* argv[])
{
string s;
s="abc123456";
//从第3个开始,将连续的3个字符替换为“good”
//即将“abc”替换为“good”
s.replace(3,3,"good");
cout<<s<<endl;
return 0;
}

运行结果:

abcgood456

10.搜索string对象的元素或子串(find())

采用find()方法可查找字符串中的第一个字符元素(char,用单引号界定)或者子串(用双引号界定),如果查到,则返回下标值(从0开始计数),如果查不到,则返回4294967295。

find()方法有很多重载函数,下面的代码,仅举出了一种用法。

#include <string>
#include <iostream>
using namespace std; int main(int argc, char* argv[])
{
string s;
s="cat dog cat";
//查找第一个字符‘c’,返回下标值
cout<<s.find('c')<<endl;
//查找第一个子串“c”,返回下标值
cout<<s.find("c")<<endl;
//查找第一个子串“cat”,返回下标值
cout<<s.find("cat")<<endl;
//查找第一个子串“dog”,返回下标值
cout<<s.find("dog")<<endl;
//查找第一个子串“dogc”,查不到则返回4294967295
cout<<s.find("dogc")<<endl;
return 0;
}

运行结果如下:

0

0

0

4

4294967295

11.string对象的比较(compare())

string对象可与使用compare()方法与其他字符串相比较。如果它比对方大,则返回1;如果它比对方小,则返回-1;如果它与对方相同相等),则返回0。代码如下:

#include <string>
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
string s;
s="cat dog cat";
//s比“cat”字符串大,返回1
cout<<s.compare("cat")<<endl;
//s与“cat dog cat”相等,返回0
cout<<s.compare("cat dog cat")<<endl;
//s比“dog”小,返回-1
cout<<s.compare("dog")<<endl;
return 0;
}

运行结果如下:

1

0

-1

12.用reverse方向排序string对象

采用reverse()方法可将string对象迭代器所指向的一段区间中的元素(字符)反向排序。reverse()方法需要声明头文件#include<algorithm>。代码如下:

#include <string>
#include <iostream>
#include <algorithm>
using namespace std; int main(int argc, char* argv[])
{
string s;
s="123456789";
reverse(s.begin(),s.end());
cout<<s<<endl;
return 0;
}

运行结果如下:

987654321

13.string对象做vector元素

#include <vector>
#include <string>
#include <iostream>
#include <algorithm>
using namespace std;
int main(int argc, char* argv[])
{
vector<string> v;
v.push_back("Jack");
v.push_back("Mike");
v.push_back("Tom");
cout<<v[0]<<endl;
cout<<v[1]<<endl;
cout<<v[2]<<endl;
cout<<v[0][0]<<endl;
cout<<v[1][0]<<endl;
cout<<v[2].length()<<endl;
return 0;
}

运行结果如下:

Jack

Mike

Tom

J

M

3

14.字符数组和string对象的输入输出

#include <string>
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
string s;
char ss[100];
//输入字符串到字符数组中
scanf("%s",&ss);
//字符数组赋值线字符串对象
s=ss;
//用printf输出字符串对象,要采用c_str()方法
printf(s.c_str());
//换行
cout<<endl;
//用printf输出字符数组
printf("%s",ss);
//换行
cout<<endl;
//用cout输出字符串对象
cout<<s<<endl;
//用cout输出字符数组
cout<<ss<<endl;
return 0;
}

15.tring对象与sscanf函数

在C语言中,sscanf函数很管用,它可以把一个字符串按你需要的方式分离出子串,甚至是数字。下面这个程序演示了sscanf函数的具体用法:

#include <string>
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
string s1,s2,s3;
char sa[100],sb[100],sc[100];
//将字符串分离成子串,分隔符为空格
sscanf("abc 123 pc","%s %s %s",sa,sb,sc);
s1=sa;
s2=sb;
s3=sc;
cout<<s1<<" "<<s2<<" "<<s3<<endl;
//将字符串分离成数字,分隔符为空格
//当用到数字的时候,跟scanf一样,它要传指针地址
int a,b,c;
sscanf("1 2 3","%d %d %d",&a,&b,&c);
cout<<a<<" "<<b<<" "<<c<<endl;
//将字符串分离成数字,分隔符为“,”和“$”
//当用到数字的时候,跟scanf一样,它要传指针地址
int x,y,z;
sscanf("4,5$6","%d,%d$%d",&x,&y,&z);
cout<<x<<" "<<y<<" "<<z<<endl;
return 0;
}

运行结果如下:

abc 123 pc

1 2 3

4 5 6

16.string对象与数值相互转换

#include <iostream>
#include <string>
#include <sstream>
using namespace std;
//C++方法:将数值转换为string
string convertToString(double x)
{
ostringstream o;
if (o << x)
return o.str();
return "conversion error";//if error
}
//C++方法:将string转换为数值
double convertFromString(const string &s)
{
istringstream i(s);
double x;
if (i >> x)
return x;
return 0.0;//if error
}
int main(int argc, char* argv[])
{
//将数值转换为string的第一种方法:C方法
char b[10];
string a;
sprintf(b,"%d",1975);
a=b;
cout<<a<<endl;
//将数值转换为string的第二种方法:C++方法
string cc=convertToString(1976);
cout<<cc<<endl;
//将string转换为数值的方法:C++方法
string dd="2006";
int p=convertFromString(dd)+2;
cout<<p<<endl;
return 0;
}

C++ STL string对象操作汇总的更多相关文章

  1. 原生JS中常用的Window和DOM对象操作汇总

    一.常用的Window对象操作 Window对象中又包含了document.history.location.Navigator和screen几个对象,每个对象又有自己的属性方法,这里window可以 ...

  2. luogu题解P1032字串变换--BFS+STL:string骚操作

    题目链接 https://www.luogu.org/problemnew/show/P1032 分析 这题本来很裸的一个BFS,发现其中的字符串操作好烦啊.然后就翻大佬题解发现用STL中的strin ...

  3. c++ string 对象操作

    字符串转换大小写如下: #include "stdafx.h" #include <iostream> #include <string> using na ...

  4. STL string常用操作指令

    s.insert(pos,args); 在pos之前插入args指定的字符.pos可以是一个下标或一个迭代器.接受下标的版本返回一个指向s的引用;接受迭代器的版本返回指向第一个插入字符的迭代器. s. ...

  5. string的+操作与StringBuilder对象

    习惯在C#代码中写str+="xxx";这样代码的请注意啦,如果这种操作是针对单个变量作很多次叠加操作的,很有可能导致性能降低. 大家都知道string与StringBuilder ...

  6. string 对象及其操作

    标准库类型string 标准库类型string表示可变长的字符序列,使用string类型必须首先包含string头文件.作为标准库的一部分,string定义在命名空间std中.接下来的示例都假定了已包 ...

  7. C风格字符串和C++ string 对象赋值操作的性能比较

    <<C++ Primer>> 第四版 Exercise Section 4.3.1 部分Exercise 4.2.9 习题如下: 在自己本机执行如下程序,记录程序执行时间: # ...

  8. (8)string对象上的操作1

     读写操作 //读写string对象的测试.//本程序输入两string类,输出两string类. #include <iostream> #include <string> ...

  9. Python把json格式的string对象转变成dict对象操作、Python3不能使用urllib2、urllib.parse.urlencode(params).encode(encoding='UTF8')

    son格式的string对象转变成dict对象操作 content=eval(content)#json字典转化 Python3不能使用urllib2 直接使用urllib.request替换urll ...

随机推荐

  1. Python操作Influxdb数据库

    1.influxdb基本操作[root@test ~]# wget https://dl.influxdata.com/influxdb/releases/influxdb-1.2.4.x86_64. ...

  2. Confluence 6 有关空间的一些提示

    如果你已经为你的整个 Confluence 站点设置了特定主题(例如文档或者其他第三方的主题),你创建的空间将会集成你需要主题.如果你没有使用默认主题的话,你可能不能在边栏中看见蓝图. Conflue ...

  3. Numpy常用API

    目录 一.输入和输出 1.1 NumPy二进制文件(NPY,NPZ) 1.2 文本文件 1.3 正则表达式解析 1.4 原始二进制文件 1.5 内存映射文件 1.6 Base-n相关 1.7 数据源 ...

  4. 『MXNet』im2rec脚本使用以及数据读取

    一.im2rec用法简介 首先看文档: usage: im2rec.py [-h] [--list] [--exts EXTS [EXTS ...]] [--chunks CHUNKS] [--tra ...

  5. React文档(一)安装

    React是一个灵活的可以用于各种不同项目的框架,你可以用它来写新应用,你也可以逐步将它引进已有的代码库而不用重写整个项目. 试用React 如果你想玩一玩React,那么就去CodePen上试一试. ...

  6. 了解一下express中间件的意思以及next()

    app.use()就是通常所说的使用中间件 一个请求发送到服务器后,它的生命周期是 先收到request(请求),然后服务端处理,处理完了以后发送response(响应)回去,而这个服务端处理的过程就 ...

  7. 使用ajax请求接口,跨域后cookie无法设置,全局配置ajax;及使用axios跨域后cookie无法设置,全局配置axios

    问题一: 使用ajax/axios跨域请求接口,后端放行了,能够正常获取数据,但是cookie设置不进去,后端登录session判断失效 ajax解决办法: //设置ajax属性 crossDomai ...

  8. 判断runtime是否运行在docker中及从docker中获取宿主机的ip信息

    1.判断运行时环境是否运行在docker中 参考:How to determine if a process runs inside lxc/Docker? 确定进程是否在LXC/Docker中运行? ...

  9. Analytic Functions in Oracle

    Contents Overview and IntroductionHow Analytic Functions WorkThe SyntaxExamplesCalculate a running T ...

  10. 安天透过北美DDoS事件解读IoT设备安全——Mirai的主要感染对象是linux物联网设备,包括:路由器、网络摄像头、DVR设备,入侵主要通过telnet端口进行流行密码档暴力破解,或默认密码登陆,下载DDoS功能的bot,运行控制物联网设备

    安天透过北美DDoS事件解读IoT设备安全 安天安全研究与应急处理中心(安天CERT)在北京时间10月22日下午启动高等级分析流程,针对美国东海岸DNS服务商Dyn遭遇DDoS攻击事件进行了跟进分析. ...