c++中从出年月日的字符串提取整形int

在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'结尾。 所以可以类似操作。  
}
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值