1.find()函数返回值是唯一的,是string::size_type
rfind()函数和find函数返回值还有参数含义都是一样的,只不过rfind()是反向,并且rfind()函数在模糊查询中经常用到。
string s="-张三-李四-王五-杨六";
string::size_type n1,n2,n3;
n1=s.find(string,position);
n2=s.find(string);
string::size_type 是一个特殊的位置变量类型
当find函数有一个参数的时候,参数是要寻找的字符串,自动从零开始找,找到第一个返回位置变量(位置变量类似于字符串数组,从0开始);
有两个参数的时候,第一个是要找的字符串,第二个是要开始找的位置。
2.substr()函数,返回值是string
s.substr(position);
s.substr(position,num):
只有一个参数的时候是指从position开始取字符取到末尾(其实第二个参数的默认值是s.size()-参数1)
有两个参数的时候是从position开始取num个字符。
3.getline(cin,s)函数的第一个参数是输入流,第二个参数是字符串,用此输入法不会像cin一样输入遇到空格就停止输入,只有当到文件结束,遇到函数的定界符,输入达到最大限度,这三中欧情况才会停止输入。
举几个有关的例子
第一个是字符串倒序
string reverse(string s)
{
long i,n=s.size();
string temp=s;//要提前对字符串变量temp赋初值,是在为这个字符串分配空间,否则后面会报错
for(i=0;i<n;++i)
{
temp[i]=s[n-i-1];//逆序,类似于字符串数组
}
}
第二个是模糊查询
int main()
{
string s="-王小一-89-李小二-92-张小天-100-刘小四-35-孟晓武-67";
string::size_type n1,n2,n3,pos=0;
string s1,name,score;
while(true)
{
if(s.find("小",pos)!=string::npos)
{
n1=s.find("小",pos);
n1=s.rfind("-",n1);
n2=s.find("-",n1+1);
n3=s.find("-",n2+1);
name=s.substr(n1+1,n2-n1-1);
score=s.substr(n2+1,n3-n2-1);
cout<<"name="<<name<<endl;
cout<<"score="<<score<<endl;
pos=n3;//注意,每次要从已经找到了的后面开始找
}
else break;
if(pos+1>=s.size())//判断是否到达边界
break;
}
}
第三个是数字转化成字符串
num2str(int m)
{
string temp;
stringstream ss;//字符串流是一种特殊的数据类型
ss<<m;
ss>>temp;
return temp;
}
第三个是静态变量(函数)的使用
class a
{
private:
static string s1;//定义静态变量
public:
static bool func()
{
s1//静态函数里面的变量一定要都是静态的;
}
};
string a::s1="000";//字符串要为其分配空间