c++中如何从字符串2015-6-8取出年月日
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++中如何从字符串2015-6-8取出年月日相关的知识,希望对你有一定的参考价值。
c++中如何从字符串2015-6-8取出年月日
在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。
sscanf(s.c_str(),"%d-%d-%d",&y,&m,&d);//s.c_str()可以将string类转为字符数组形式,以\'\\0\'结尾。 所以可以类似操作。
参考技术A
字符串变量string可以当成字符数组一样用
string a = "2015-06-08";int year,month,day;
year = a[0] * 1000 + a[1] * 100 + a[2] * 10 + a[3];
month = a[5] * 10 + a[6];
day = a[8] * 10 + a[9];
sql从身份证中取出出生日期
以oracle为例:假设你的tb_csm_individual表里面CERTIFICATE_CODE字段存着身份证号:select
to_date(substr(CERTIFICATE_CODE,7,8),'%yyyy%mm%dd')
from
tb_csm_individual
where
CERTIFICATE_CODE='210102197908223722'
;这样就查出来了这个身份证号的出生日期;
下面的脚本就是计算当前日期减去出生日期求出来的生日
select
EXTRACT(year
FROM
to_date('2018-11-22','yyyy-mm-dd'))
-
EXTRACT(year
FROM
to_date(substr(CERTIFICATE_CODE,7,8),'yyyy-mm-dd'))
years
from
tb_csm_individual
where
CERTIFICATE_CODE='210102197908223722';
至于剩下的年龄区间楼主自己应该知道怎么求了把 参考技术A 根据身份证号验证出生日期:
alter
table
你的表--修改表
/*添加约束
要么删掉你之前的生日约束
要么把
约束开始到结束复制到你的约束里再改*/
add
constraint
ck_生日
check(
--约束开始
convert(datetime,replace(stuff(stuff(right
(left(char之类类型的18位的身份证号,14),8),5,0,'-'),8,0,'-'),'0',''))=生日字段
--约束结束
)
最后只要把中文替换掉就可以了本回答被提问者采纳
以上是关于c++中如何从字符串2015-6-8取出年月日的主要内容,如果未能解决你的问题,请参考以下文章