标签:char user pos tde for ring 取出 转换 结束
一:
string作为C++常用的一个类,得熟悉它的一些常用的方法。在使用这个类之前,得加上头文件
#include <string>
#include <stdexcept> //标准的异常类的库
二:
(1)获取string的元素个数方法,还有访问string中的每个元素的方法
void test01()
{
string str1="hello world!good bye";
int i;
cout<<"str1.size:"<<str1.size()<<endl;
cout<<"str1.length:"<<str1.length()<<endl;
for(i=0;i<str1.size();i++)
{
cout<<str1[i];
}
cout<<endl;
for(i=0;i<str1.size();i++)
{
cout<<str1.at(i);
}
cout<<endl;
try
{
cout<<str1.at(80);
}
catch(out_of_range &e)
{
cout<<"out_of_range"<<endl;
cout<<e.what()<<endl;
}
catch(...)
{
cout<<"越界异常"<<endl;
}
}
注:str1.size()和str1.length()获取得到的值是一样的,也就是这两个方法都能得到字符串的长度;
str1[i]和str1.at[i]都能获取得到当前下标对应的字符,但是执行 “ cout<<str1[60]<<endl; “这样的话编译是没有问题的,但是 “ cout<<str1.at(60)<<endl; “编译就会出现报错的情况。
(2)字符串的拼接
注:字符串可以使用 ”+“ 或者 方法“ append ()” 来接接,例子如下:
void test02()
{
string str1="my";
string str2="love beijing";
string str3="good good study";
str1=str1+str2;
cout<<str1<<endl;
str3.append(" day day up");
cout<<str3<<endl;
}
(3)字符串的查找和替换
注:如下的代码str1.find("de")和str1.rfind("de")的返回值都是5,也就是结果相同,但是这两个方法的查找顺序是相反的;str1.rfind("de")是从字符串尾部开始查找的。
void test03()
{
string str1="myabcdef";
int pos=0;
pos=str1.find("de");
cout<<"str1.find:"<<pos<<endl;
pos=str1.rfind("de");
cout<<"str1.rfind:"<<pos<<endl; //rfind和find的结果一样,只是查找的顺序刚好相反
string str2="zhoukeliang ni hao";
str2.replace(1,4,"66");
cout<<"str2:"<<str2<<endl;
}
str2.replace(1,4,"66"),这个表示从下标1开始,后面的4个字符串替换为“66”;而下标1 为 ”h",也就是将"zhoukeliang ni hao" 改成了 ” z66eliang ni hao “
(4)字符串的比较
void test04()
{
string str1="abc";
string str2="efg";
if(str1.compare(str2)==0)
{
cout<<"str1==str2"<<endl;
}
else if(str1.compare(str2)==1)
{
cout<<"str1>str2"<<endl;
}
else
{
cout<<"str1< < str2"<<endl;
}
}
注:str1.compare(str2),当str1和str2相等时,返回的值就是0;
当str1大于str2时,返回的值就为1;
当str1小于str2时,返回的值小于0;
(5)截取字符串
string str.substr(nStart, nLength)
// 从str字符串nStart位置开始截取nLength个字符 , 如果nLength 大于剩余的字符则截取到str结束为止
例子如下:
void test05()
{
string str1="abczhoukeliang";
string str2;
str2=str1.substr(3,4);
cout<<"str2:"<<str2<<endl;
string email="234358125@qq.com";
int pos;
pos=email.find("@");
cout<<pos<<endl;
string username;
username=email.substr(0,pos);
cout<<"username:"<<username<<endl;
}
注:str1.substr(3,4);截取出字符串 “ zhou ” ;
email.substr(0,pos); 截取出 “ 234358125 ”,也就是邮箱对应的用户名。
(6)插入字符串
string str.insert( int p0,const string &s )
//在字符串str的p0位置之后插入字符串s
void test06()
{
string str1="abczhoukeliang";
str1.insert(3,"000"); //在c字符的后面插入000
cout<<"str1:"<<str1<<endl;
}
输出为:abc000zhoukeliang
(7)删除字符串
string str.erase(int pos,int n) //删除str字符串里面从pos开始的n个字符
例子如下:
void test07()
{
string str1="abc000zhoukeliang";
str1.erase(3,3);
cout<<"erase the result:"<<str1<<endl;
}
输出的结果为:abczhoukeliang
也就是删除str1里面从字符0开始的3个字符 ” 000 ”
(8)string类型转为char类型
void test08()
{
string str1="abczhoukeliang";
const char *buff=str1.c_str();
cout<<buff<<endl;
}
(9)const char *会隐式转换成string类型,但是string就不能隐式转换成const char *
例子如下:
void fun1(string s)
{
cout<<"fun1:"<<s<<endl;
}
void fun2(char *p)
{
cout<<"fun2:"<<*p<<endl;
}
void test09()
{
string str1="abczhoukeliang";
const char *buff=str1.c_str();
fun1(buff); //const char *隐式转换成string
string str2(buff);
fun2(str2) ; //代码这里是有错误的,string不能隐式转换成const char * ,fun2(str2)这样会报错
cout<<str2<<endl;
}
标签:char user pos tde for ring 取出 转换 结束
原文地址:https://www.cnblogs.com/Unclebigdata/p/14410327.html