小宋佳 虾酱味:c语言 char* 问题

来源:百度文库 编辑:高校问答 时间:2024/05/10 12:30:34
我有一个字符串:" 2006 : 04 : 07 11 : 19 : 59 ",想把里面的数值提取出来,转换成整型,且必须用c语言中的char*实现,请各位大哥指教。
必须用c语言中的char* 实现,拜托拜托,小弟等急用啊!
不是的各位,这是个不规则字符串,当中有空格,如:2006:空空:空04:07.......,有空格,怎么办,请高手指教!
而且,这是图片文件的exif信息,不是读系统的时间,所以日期的函数不可以用的。

晕了,原来字符串中有不确定空格啊,那我原来想的方法就不行了。sscanf也不能用了。

sscanf我没用过,可能确实如zamanewby所说吧。

随便写了个,楼主先试试。

#include "stdio.h"

char *p;

int getInt()
{
while((*p<'0' || *p>'9') && *p!='\0')
{
p++;
}
if(*p=='\0') return -1;
int s=0;
while(*p>='0' && *p<='9')
{
s=s*10+(*p-'0');
p++;
}
return s;
}

void main()
{
char *str = " 2006 : 04 : 07 11 : 19 : 59 ";
p = str;
int year,month,day,hour,minute,second;
year=getInt();
month=getInt();
day=getInt();
hour=getInt();
minute=getInt();
second=getInt();
printf("year=%d\nmonth=%d\nday=%d\nhour=%d\nminute=%d\nsecond=%d\n",year,month,day,hour,minute,second);
}

这样做太麻烦了
C语言中 有 去本地时间,日期的 函数
getdate()读取系统日期函数
原形:void getdate(pdate)
struct date
{
int da_year;
int da_day;
int da_mon;
};
struct date *pdate;
头文件:dos.h
gettime()读取系统时间的函数
原形:void gettime(ptime)
struct time
{
unsigned char ti_min;
unsigned char ti_hour;
unsigned char ti_hund;//百分之一秒
unsigned char ti_sec;
};
struct time *ptime;

int isNumeric(char p)
{
if(p>='0' && p<='9')return 1;
else return 0;
}
main(){
char *p = "2006:04:07:11:19:59";
int i,k,pos,count;
int f[20]={0};
for(i=0,k=0,pos=1;k<20 && p[i]!="\0";i++){
if(isNumeric(p[i])){
f[k]+=pos * int(p[i]-'0');
pos *= 10;//进阶
}else{
k++;//移向下一个保存点!
}
}
for(i=0;i<k;i++)
printf("%10d",f[i]);
}

其实也不麻烦
用函数 int atoi(const char*) ; double atoi(const char*) ;
就可以了
举个例子: int a = atoi("888") ; printf("%d",a) 结果输出888
float a = atoi("8.4949") printf("%6.4f",a)结果输出8.4949

int y, m, d, h, mm, s;

char buf[] = " 2006 : 04 : 07 11 : 19 : 59 ";

sscanf(buf, "%d:%d:%d%d:%d:%d", &y, &m, &d, &h, &mm, &s);

sscanf不受空格影响啊, 它是读到下一个非空白字符。 %d之间有:说明必须读到一个:才会继续读下一个数字。 我觉得没问题。 如若不然, 你只好一个一个字符判断了。