c++中自带的字符串类string在处理字符串的时候会比字符数组方便很多,而且可以直接与其他嵌套使用;头文件为#include<cstring>
1.创建对象和赋值
#include<bits/stdc++.h>
using namespace std;
int main()
{
string str;//创建一个字符串变量str
str="hello";
cout<<str<<endl;
}
#include<bits/stdc++.h>
using namespace std;
int main()
{
string str1,str2;//我们来看一下覆盖赋值
str1="hello,world";str2="nice";
cout<<"str1:"<<str1<<endl<<"str2:"<<str2<<endl<<endl;
str1=str2;
cout<<"str1:"<<str1<<endl<<"str2:"<<str2<<endl;//覆盖赋值跟c语言中整形变量的覆盖赋值一样,会直接覆盖;
}
2.字符串的连接和比较
连接在这里我们可以直接使用‘+’运算符;
#include<bits/stdc++.h>
using namespace std;
int main()
{
string str,str2;
str="h";
str=str+'e';//在尾部加一个字母e
cout<<str<<endl;
str=str+"llo";//在尾部加一个串llo
cout<<str<<endl;
str2=",world!";
str=str+str2;//加另一个字符串
cout<<str<<endl;
}
比较也可以直接用'>''<''=="
#include<bits/stdc++.h>
using namespace std;
int main()
{
string str1="abd",str2="abc";
if(str1>str2)
{
cout<<"str1>str2"<<endl;
str2="abe";//更改str2的值使str1<str2
}
if(str1<str2)
{
cout<<"str1<str2"<<endl;
str2="abd";//更改str2的值使str1==str2
}
if(str1==str2)
{
cout<<"str1==str2"<<endl;
}
return 0;
}
3.访问string对象的元素;
我们想访问字符串中的某个位置的字符的时候c语言的那种方式依旧可以用;
#include<bits/stdc++.h>
using namespace std;
int main()
{
string str="0123456789";
cout<<str[5]<<endl;
return 0;
}
substr(int pos,int n);意思是从第pos位开始输出n个字符;可以访问其中某一段,这对汉字的输出起到了很大的便利,因为汉字占两个位置按上边的方法输出是不行的;
#include<bits/stdc++.h>
using namespace std;
int main()
{
string s="你好";
cout<<"*"<<s[0]<<endl;//看一下按上边那种输出方式,输出的是什么
cout<<s.substr(0,2)<<endl;//第一个参数为第几位,第二个为输出几个字符;汉字两个
cout<<s.substr(2,2)<<endl;
}
4.插入字符或字符串
insert()函数;插入到指定位置之前;(这个位置是迭代器位置,迭代器是什么我也不太理解)
#include<bits/stdc++.h>
using namespace std;
int main()
{
string str="12345";
str.insert(1,"hello");//在1位置插入hello
str.insert(str.begin(),'S');//这种只能插入一个字符;str.begin()返回开始位置的迭代器
str.insert(str.end(),5,'x');//在末尾插入5个x str.end()返回结束位置的迭代器
cout<<str<<endl;
return 0;
}
5.删除元素
erase()函数;删除某个字符或者一个区间的所有元素;
#include<bits/stdc++.h>
using namespace std;
int main()
{
string str="123zabc456";
string::iterator it=str.begin();//定义迭代器变量,并且位置指在首元素,迭代器用法跟循环变量i差不多(我也不太明白直接用就行)
str.erase(it+3);//删除第4个元素 因为it从0开始所以it+3就是第四个元素
cout<<str<<endl;
str.erase(it+3,it+6);//删除[3,6)区间的元素 既删除第3,4,5元素 注意从0开始计数!
cout<<str<<endl;
return 0;
}
6.替换字符或者字符串
replace()函数;
#include<bits/stdc++.h>
using namespace std;
int main()
{
string str="123456789";
str.replace(2,3,"good");//从第2个开始,将连续的三个字符替换为good
cout<<str<<endl;
return 0;
}
7.搜索string对象的元素或者子串
find();这个函数有很多重载函数,用法也是多种多样;在这我只说常用的一种;
#include<bits/stdc++.h>
using namespace std;
int main()
{
string str="good bad";
cout<<str.find('b')<<endl; //找到第一个字符b返回下标值
cout<<str.find("bad")<<endl;//找到第一个bad字符串的返回开始位置下标值
return 0;
}
8.string对象的长度和清空和判断是否为空
length()求长度;clear()清空;empty()判断是否为空;
#include<bits/stdc++.h>
using namespace std;
int main()
{
string str="123456";
cout<<str.length()<<endl;//输出str长度
cout<<str.empty()<<endl;//判断是否为空,为空返回1,不为空返回0
str.clear();//清空str
cout<<str.empty()<<endl;
return 0;
}
9.string和STL其他工具嵌套使用
(1)string作为vector的元素
#include<bits/stdc++.h>
using namespace std;
int main()
{
string str1="ABC",str2="XYZ";
vector<string>v;
v.push_back(str1);
v.push_back(str2);
cout<<v[0]<<endl<<v[1]<<endl;
return 0;
}
(2)string排序
①可以用sort对单个string中的某一段进行排序;
#include<bits/stdc++.h>
using namespace std;
int main()
{
string str1="BDACEGF",str2="ABDECXYZ";
sort(str1.begin(),str1.end());//对str1整个进行排序
cout<<str1<<endl;
sort(str2.begin()+2,str2.begin()+5);//对str2的[2,5)区间进行排序
cout<<str2<<endl;
return 0;
}
②对字符串数组排序
#include <bits/stdc++.h>
using namespace std;
int main()
{
string s[6];
s[0] = "ABC";
s[1] = "ABD";
s[2] = "ABCD";
s[3] = "BBC";
s[4] = "ABC";
s[5] = "aBC";
sort(s,s + 6);//对这6个字符串按照字典序进行排序
for(int i = 0; i < 6; i++)
{
cout << s[i] << endl;
}
return 0;
}
10.字符串与数字的转换,stringstream的简单运用,注意如果连续运用同一个需要用clear清空
字符串变为数字
#include <bits/stdc++.h>
using namespace std;
int main()
{
string s = "123";
int a = 0;
stringstream ss;
ss<<s;
ss>>a;
cout << a << endl;
return 0;
}
数字变为字符串
#include <bits/stdc++.h>
using namespace std;
int main()
{
string s = "123";
int b = 666;
stringstream ss;
ss << b;
ss >> s;
cout << s << endl;
return 0;
}
外加一个sscanf用法
#include<bits/stdc++.h>
using namespace std;
int main()
{
char str[100];
//用法一:取指定长度的字符串
sscanf("12345","%4s",str);
printf("用法一\nstr = %s\n",str);
//用法二:格式化时间
int year,month,day,hour,minute,second;
sscanf("2013/02/13 14:55:34","%d/%d/%d %d:%d:%d",&year,&month,&day,&hour,&minute,&second);
printf("用法二\ntime = %d-%d-%d %d:%d:%d\n",year,month,day,hour,minute,second);
//用法三:读入字符串
sscanf("12345","%s",str);
printf("用法三\nstr = %s\n",str);
//用法四:%*d 和 %*s 加了星号 (*) 表示跳过此数据不读入. (也就是不把此数据读入参数中)
sscanf("12534acc","%*d%s",str);
printf("用法四\nstr = %s\n",str);
//用法五:取到指定字符为止的字符串。如在下例中,取遇到'+'为止字符串。
sscanf("12345+acc","%[^+]",str);
printf("用法五\nstr = %s\n",str);
//用法六:取到指定字符集为止的字符串。如在下例中,取遇到小写字母为止的字符串。
sscanf("12345+acc121","%[^a-z]",str);
printf("用法六\nstr = %s\n",str);
return 0;
}
想了解更多大家可以去string用法总结,看一下大神的;