string 容器用法
string型变量的使用并不需要特殊的头文件,但是一部分的string字符串的操作在使用时需要加上头文件:
#include<string>
用法
(1)直接给string对象赋值
string s;
s="abcd"
(2)把字符指针赋值给一个字符串对象
string s;//直接初始化为空串
char a[1000];
scanf("%s",&a);//scanf的输入速度比cin快,且scanf不支持string对象
s=a;
(3)常用方法
string s;
string::iterator it;//定义迭代器
it=s.begin;
//利用迭代器循环遍历string
for(;it!=s.end();it++){
cout<<*it;
}
//利用迭代器循环遍历string
for(int i=0;i<str.size();i++){
cout<<it[i];
}
s.size();//字符串长度
s.length();//字符串长度
s.append(str);//在字符串s尾部添加字符串str,只能添加字符串不能添加字符
s.insert(it+n,c);//把字符c插入迭代器位置为n的地方(下标从0开始)
s.insert(p.str);//把字符串str插入到下标p的位置(下标从0开始)
s.erase(it+n);//删除迭代器位置为n的元素(下标从0开始)
s.erase(it+m,it+n);//删除迭代器位置从m到n-1区间的元素
s.empty();//返回字符串是否为空,空返回true
s.replace(p,n,str);//从下标p开始,把后面的n个字符串替换成字符串str
s.find(c);//返回字符串s中第一次出现字符c的下标值,c为空串则返回0,如果没有找到则返回一个很大的数(无符号整型的-1)
s.find(str);//返回字符串s中第一次出现子串str的下标值,没有则返回0
s.compare(str);//比较两个字符串的大小,如果s==str返回0,如果s>str返回正数,否则返回负数
s.begin();//返回字符串首地址
s.end();//返回字符串尾地址
s.clear();//清空字符串,一般如果清空一个字符串就直接给它赋空字符串,即s="";
(4)逻辑运算与简便操作
s1>/</==/!=/>=/<=s2;//两个字符串可以进行逻辑判断
s1=s2;//两个字符串相互赋值
s1=s1+s2;//在s1尾部追加字符串或者字符
s1=s2+s3;//两个字符串进行相加,结果与两个字符串的相加顺序有关 例:s2="abc" s3="123" s1="abc123"
(5)int与string之间的相互转换
1.int转为string
使用stringstream
注意每次转换都要情况straingstream,里面存的东西不会随之转换而消失
#include<sstream>
int x=1;
stringstream st;
string s;
st<<x;
s=st.str();
cout<<s<<endl;
也可以用to_string()函数
//实现to_string函数
#include<iostream>
#include<string>
using namespace std;
#define max 100
string to_String(int n)
{
int m = n;
char s[max];
char ss[max];
int i=0,j=0;
if (n < 0)// 处理负数
{
m = 0 - m;
j = 1;
ss[0] = '-';
}
while (m>0)
{
s[i++] = m % 10 + '0';
m /= 10;
}
s[i] = '\0';
i = i - 1;
while (i >= 0)
{
ss[j++] = s[i--];
}
ss[j] = '\0';
return ss;
}
int main()
{
cout << "请输入整数:";
int m;
cin >> m;
string s = to_String(m) + "abc";
cout << s << endl;
system("pause");
return 0;
}
2.string转为int
int x=1;
stringstream st;
string s="123";
st<<s;
st>>x;
st.clear();//需要调用方法清空
cout<<x<<endl;
操作示例
#include<iostream>
#include<string>
using namespace std;
int main()
{
//定义一个字符串变量
string s;
//从字符串s尾部添加一串字符串
s.append("hello!");
cout<<"s.append(): "<<s<<endl;
//在指定迭代器位置插入一个字符
s.insert(s.begin()+1,'q');
cout<<"s.insert(): "<<s<<endl;
//在指定位置插入一个字符串
s.insert(2,"asd");
cout<<"s.insert(): "<<s<<endl;
//删除指定迭代器位置的一个字符
s.erase(s.begin()+1);
cout<<"s.erase(): "<<s<<endl;
//删除迭代器指定区间的字符
s.erase(s.begin()+1,s.begin()+4);
cout<<"s.erase(): "<<s<<endl;
//返回字符串的长度
cout<<"s.length(): "<<s.length()<<endl;
//判断字符串是否为空
if(s.empty())
cout<<"Is empty"<<endl;
else
cout<<"Not empty"<<endl;
//字符串替换
s.replace(2,3,"asd");
cout<<"s.replace(): "<<s<<endl;
//查找字符
cout<<"s.find(): "<<s.find('a')<<endl;
//查找字符串
cout<<"s.find(): "<<s.find("ea")<<endl;
//比较两个字符串的大小
string s1,s2;
s1="asd";
s2="qwe";
if(s1.compare(s2)==0)
cout<<"s1=s2"<<endl;
else if(s1.compare(s2)>0)
cout<<"s1>s2"<<endl;
else if(s1.compare(s2)<0)
cout<<"s1<s2"<<endl;
//简便操作
string s3,s4;
s3="zxc";
s1=s1+s2;
cout<<"s1: "<<s1<<endl;
s4=s1+s3;
cout<<"s4: "<<s4<<endl;
//清空字符串
s="";
//判断字符串是否为空
if(s.empty())
cout<<"Is empty"<<endl;
else
cout<<"Not empty"<<endl;
}
结果
各种find
https://www.cnblogs.com/wkfvawl/p/9429128.html