问个有关sscanf的小问题。up有分

lifengice0706 2005-10-17 10:56:00
今天早上想把标准时间类型的每一部分取出来,即"2002-10-2 20:20:20"。
有不想用CTIME等mfc方式。想来想去---->sscanf。很多人讨厌这个api哦。

char Timec[] = "2002-10-10 20:20:20";

char Year[10];
memset(Year,0,10);

char Month[10];
memset(Month,0,10);
...

sscanf(Timec,"%[^'-']-%[^'-']-%s %[^':']:%[^':']:%s",Year,Month...);

发现不行哦,Year=="2002-10-10 20:20:20" 后面的字段没东东。


当我把'-'全换成':',就没问题,'-'得罪誰了!!!我只有用别的方法了。
好久没问问题了,顺便散分。
...全文
176 点赞 收藏 19
写回复
19 条回复
jazy 2005年10月18日
sscanf(Timec,"%[^-]-%[^-]-%[^ ] %[^:]:%[^:]:%s",Year,Month,Day,Hour,Minute,Second);
试过可以的
回复 点赞
lifengice0706 2005年10月18日
最后一顶,盼有正解,晚上结帐。
回复 点赞
chenjunge 2005年10月18日
看来大家都是闻“分”而动啊,连牛人也不例外^-^
我不回答这个问题,也不要分,只是来看热闹的,呵呵
回复 点赞
guangyou 2005年10月18日
学习
回复 点赞
muyi666 2005年10月18日
恩,UP
回复 点赞
yayaniuniu502 2005年10月18日
up
回复 点赞
bobob 2005年10月18日
-是有点特殊,但是不加''可以避免,我一直不加''使用的
回复 点赞
bobob 2005年10月18日
"%[^'-']-%[^'-']-%s %[^':']:%[^':']:%s"
改成
"%[^-]-%[^-]-%s %[^:]:%[^:]:%s"


char Timec[] = "2002-10-10 20:20:20";

char Year[10];
memset(Year,0,10);

char Month[10];
memset(Month,0,10);
char day[10];
memset(day,0,10);
char our[10];
memset(our,0,10);
char mine[10];
memset(mine,0,10);
char sec[10];
memset(sec,0,10);

sscanf(Timec,"%[^-]-%[^-]-%s %[^:]:%[^:]:%s",Year,Month,day,our,mine,sec);

楼主自己写法有误
回复 点赞
cst1978 2005年10月17日
up
回复 点赞
老夏Max 2005年10月17日
使用_strtime/time/gmtime/localtime/_ftime/strftime等等函数操作time_t类型的变量,然后将其转换为tm结构即可,如:
tm* pTime = localtime(&tempTime);
if(!pTime)
{
delete []tempStr;
return;
}
sprintf(tempStr, "%02d:%02d:%02d %s", pTime->tm_hour, pTime->tm_min,
pTime->tm_sec, (pTime->tm_hour >12)? "PM":"AM");
回复 点赞
老夏Max 2005年10月17日
呵呵,学习。如果使用STL或者C++,可以直接使用tm型的变量直接操作,具体的参考MSDN!
回复 点赞
快乐鹦鹉 2005年10月17日
呵呵。如果要切隔字符串,好像只能用空格作为间隔符号,其它符号分隔不开。
你这儿最好是用laiyiling的办法,用整数类型切隔就万事大吉了。
回复 点赞
Kudeet 2005年10月17日
上面错了,应该是:
int year,month,day,hour,min,second;
sscanf(Timec,"%4d-%2d-%2d %2d:%2d:%2d",&year,&month,&day,&hour,&min,&second);
回复 点赞
Kudeet 2005年10月17日
int year,month,day,hour,min,second;
sscanf(Timec,"%4s-%2s-%2s %2s:%2s:%2s",&year,&month,&day,&hour,&min,&second);
回复 点赞
jazy 2005年10月17日
请问[^'-']代表什么意思?不懂的说。是指msdn中这段吗?
%
  • [width]
    An asterisk (*) following the percent sign suppresses assignment of the next input field, which is interpreted as a field of the specified type. The field is scanned but not stored.

    这里的中括号不用在代码中写出来的,写成
    sscanf(Timec,"%4s-%2s-%2s %2s:%2s:%2s",Year,Month, Day, Hour, Minute, Second);
    就好了
回复 点赞
nkwesley 2005年10月17日
大家讨论,呵呵
回复 点赞
rageliu 2005年10月17日
回复 点赞
lifengice0706 2005年10月17日
自己再次up!
回复 点赞
lifengice0706 2005年10月17日
首先说明一下,[^'-']是一种正则表示,用来对将串进行串的分割。
在msdn的例子中有这样的代码。
谢谢,jazy() 和laiyiling(●CSDN●)及 vcleaner(我没当大哥很久了.......),方法可行,这我也知道,我现在是要处理每一个字段,真不想再itoa()了。
我想了别的办法实现了:
CString strTimec = _T("2002-1-1 23:23:23");
...

strTimec.Replace('-',':');
sscanf(Timec,"%[^':']:%[^':']:%s %[^':']:%[^':']:%s",Year,Month...);

可心里不爽!自己up一下。



回复 点赞
发动态
发帖子
VC/MFC
创建于2007-09-28

7901

社区成员

42.1w+

社区内容

VC/MFC相关问题讨论
社区公告
暂无公告