string与C风格对比
一,char*是一个指针,string是一个类
string封装了char*,管理这个字符串,是一个char*型的容器。
二,string 封装了很多实用的成员方法
查找:find, 拷贝:copy,删除:delete,替换:replace,插入:insert
三,不用考虑内存释放和越界
string 管理了char* 所分配的内存,每一次string的复制,取值都是由string 类负责维护,不用担心复制越界和取值越界等。
string 构造函数
一,string s1,//创建一个空的字符串
二,string s2(s1), //拷贝构造
三,string s3("aaa") //有参构造
四,string s4(10,'a') //两个参数的有参构造
string 基本赋值操作
一,string s5;
s5=s4;
二,s5.assign("abcdef")//原型为 s5.assign(const char*s)
s5=abcdef;
三,s5.assign("abcdefg",3);//两个参数
s5的值abc; //截取了前3个
四,s6.assign(s5,1,5) //将s5从1开始的5个字符复制给s6
string字符存取
一,string s="hello world"
for(int i=0;i<size();i++)
{ cout<<s[i]<<endl; //[]越界会直接挂掉
cout<<s.at(i)<<endl;//at越界只会抛出一个异常 out_of_range
}
string拼接
一,string str1=“jiang”;
string str2="shuang";
string str3="shuang";
str1+=str2; //jiangshuang
str1.append(str3);//jiangshuangshuang
string查找
一,int pos=str4.find(str5)//如果找不到子串,返回-1,找到返回第一次出现的位置。
rfind//从右往左
find(str5,3)//从3开始查找
二,str4.replace(1,3,"111111");//替换从1开始的3个字符为“111111”(是两个字符串替换,可能不相等)
string比较
一,if(str1.compare(str2)==0)//>.<
string子串
string str="abcde"
string subStr=str.substr(1,3)//bcd从1开始截3个字符
一个例题(提取网站中的每个单词)
string str="www.jiangshuang.com.cn"
vector<string> v;
int start=0;
while(true)
{ int pos=str.find('.',start);
if(pos==-1)
{ subString=str.substr(start,str.size()-start);
v.push_back(subString);
}
subString=str.substr(start,pos-start);
v.push_back(subString);
star=pos+1;
}
for(vector<string>::iterator it =v.begin();it!=v.end();it++)
{
cout<<*it<<endl;
//www
//jiangshuang
//com
//cn
}
字符串的插入与删除
一,插入
string str="hello";
str.insert(1,"111");//h111ello;
str.insert(1,str1)//可以在指定位置插入字符串
str.insert(int pos,int n,char c)//在指定位置插入n个字符
二,删除
str. erase(int pos,int n);//从指定位置插入n个字符。
string 与 c-style字符串转换
//char*->string
char* str="hello";
string s(str);
//string->char*
const char*str2=s.c_str();
另:
void dowork(string s)
{ }
dowork(str2)//编译器将 const char* 可以隐式类型转换为 string
//编译器不会将 string隐式类型转换为 const char*
string字符串内字母的变大变小
str[i]=topower(str[i]);//转大
str[i]=tolower(str[i]);//转小
string变成数字
int s=atoi(str.c_str());
atoi()的参数是 const char* ,因此对于一个字符串str我们必须调用 c_str()的方法把这个string转换成 const char*类型的,