问个有关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" 后面的字段没东东。


当我把'-'全换成':',就没问题,'-'得罪誰了!!!我只有用别的方法了。
好久没问问题了,顺便散分。
...全文
239 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
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一下。



16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧