在C++中字符串有两种,不过提取方式类似,具体如下:
一、以’\0’结束的字符数组。
对于以’\0’结束的字符数组,可以有如下两种方式:
1、通过自定义函数提取。
由于格式固定,所以可以通过计算提取。
void get_data(char *s, int &y, int &m, int &d)
{
int i=0;
y=0;
while(s[i]!= '-')//循环提取出年。
{
y=y*10+s[i]-'0';
i++;
}
i++;//忽略'-'.
m=0;
while(s[i]!='-')//循环提取出月。
{
m=m*10+s[i]-'0';
i++;
}
i++;//忽略'-'
d=0;
while(s[i]!='\0')//循环提取出日。
{
d=d*10+s[i]-'0';
i++;
}
}
2、利用sscanf自动完成。
sscanf可以从字符串中格式化提取数据。
代码如下:
void get_data(char *s, int &y, int &m, int &d)
{
sscanf(s,"%d-%d-%d",&y,&m,&d);//这样一句就可以了。
}
二、string类字符串。
与字符数组类似,string类字符串也可以用类似方式实现。
1、通过自定义函数:
void get_data(string &s, int &y, int &m, int &d)
{
int i=0;
y=0;
while(s[i]!= '-')//循环提取出年。
{
y=y*10+s[i]-'0';
i++;
}
i++;//忽略'-'.
m=0;
while(s[i]!='-')//循环提取出月。
{
m=m*10+s[i]-'0';
i++;
}
i++;//忽略'-'
d=0;
while(i<s.length())//循环提取出日。
{
d=d*10+s[i]-'0';
i++;
}
}
2、string类可以转为字符数组形式,所以一样可以用sscanf。
void get_data(string &s, int &y, int &m, int &d)
{
sscanf(s.c_str(),"%d-%d-%d",&y,&m,&d);//s.c_str()可以将string类转为字符数组形式,以'\0'结尾。 所以可以类似操作。
}