求一个算法?

liujiaji 2010-01-12 03:10:04
例如一个字符数组里存放着时间。比如:
char s[256]里放着:“3:28.901”也就是时间。3分28秒。
但是我想把它转换为秒。

int StrintToTick(const char *s)
{
.......?
}
20分技术分,10分非技术分

谢谢!
...全文
125 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
liujiaji 2010-01-12
  • 打赏
  • 举报
回复
谢谢诸位,结贴了
lj8873 2010-01-12
  • 打赏
  • 举报
回复
用一些c++的字符串函数会简单多,但是我已经好几年没碰过c++了,全忘了,只能这样了,将就点吧!
lj8873 2010-01-12
  • 打赏
  • 举报
回复
输出结果:
1828
28
0
1800
lj8873 2010-01-12
  • 打赏
  • 举报
回复
#include<iostream>
using namespace std;

int strToInt(const char *s)
{
if(s ==NULL)
{
return -1;
}
int rst=0;
for(int i=0;s[i]!='\0';i++)
{

if(s[i]>=48&&s[i]<=57)//数字
{
rst=rst*10+s[i]-48;
}
else
{
return -1;
}
}
return rst;
}

int StrintToTick(const char *s)
{
char * min =new char [3];
int minCurrent=0;
int state=0;
char * sec =new char [3];
int secCurrent=0;

int iMin=0;
int iSec=0;
cout<<sizeof(s)<<endl;
for(int i=0;s[i]!='\0';i++)
{
cout<<s[i]<<endl;
if(s[i]>=48&&s[i]<=57)//数字
{
if(state==0){
min[minCurrent++]=s[i];
}
else if(state==1)
{
sec[secCurrent++]=s[i];
}
}
else if(s[i]==58)//冒号
{
if(state==0)
{
min[minCurrent]='\0';
iMin=strToInt(min);
state=1;
}
else if(state==1)
{
return -1;
}
}
else if(s[i]==32)//空格
{
continue;
}
else if(s[i]=='.')
{
break;
}
else
{
return -1;
}

}
sec[secCurrent]='\0';
iSec=strToInt(sec);
if(iMin>=60||iSec>=60)
{
return -1;
}
return iMin*60+iSec;
}


void main()
{
cout<< StrintToTick("30:28.901")<<endl;
cout<< StrintToTick("00:28.901")<<endl;
cout<< StrintToTick("00:00.901")<<endl;
cout<< StrintToTick("30:00.901")<<endl;
}
liujiaji 2010-01-12
  • 打赏
  • 举报
回复
我也是这么做的,sec就是求不出来啊
wuyu637 2010-01-12
  • 打赏
  • 举报
回复

int StringToTick(const char *s)
{
int min,sec,mSec;
if(s != NULL)
{
sscanf(s,"%d:%d.%d",&min,&sec,&mSec);
}
return min*60+sec;
}
int main()
{
char buffer[] = "3:28.901" ;

cout << StringToTick(buffer)<< endl;
return 1;
}


===========
输出208
liujiaji 2010-01-12
  • 打赏
  • 举报
回复
例子:字符串:"3:28.901"
我用sscanf(s,"%d:%d.%d",&min,&sec,&mSec); 得不到啊?

只能得到:min 而sec不对
如下:
int StringToTick(const char *s)
{
int min,sec,mSec;
if(s != NULL)
{
sscanf(s,"%d:%d.%d",&min,&sec,&mSec);
}
return min*60+sec;
}
  • 打赏
  • 举报
回复
j这是什么算法?
cattycat 2010-01-12
  • 打赏
  • 举报
回复
sscanf可以,atoi也可以,只不过atoi要你往右移动指针。sscanf最简单。
strtok可以指定分隔符。
liujiaji 2010-01-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wuyu637 的回复:]
sscanf(s,"%d:%d.%d",min,sec,mSec);

return min*60+sec;
[/Quote]

sscanf(s,"%d:%d.%d",min,sec,mSec);不加&对吗?

我的sec始终是256.
例子:"3:28.901"
int StringToTick(const char *s)
{
int min,sec,mSec;
if(s != NULL)
{
sscanf(s,"%d:%d.%d",&min,&sec,&mSec);
}
return min*60+sec;
}
jxxx2967 2010-01-12
  • 打赏
  • 举报
回复
楼主提这个问题,有可能是在不能使用库函数的情况下。

比如,某些小的嵌入式系统。
  • 打赏
  • 举报
回复
解析char*字符串。

sscanf,atoi,strtok。
用那个随你。
xixiaoliu 2010-01-12
  • 打赏
  • 举报
回复
接非技术分来了
liujiaji 2010-01-12
  • 打赏
  • 举报
回复
不对啊。
lovesi3344 2010-01-12
  • 打赏
  • 举报
回复
这题目未免有点。。。。。。
jxxx2967 2010-01-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wuyu637 的回复:]
sscanf(s,"%d:%d.%d",min,sec,mSec);

return min*60+sec;
[/Quote]

应该可以
shellfish567 2010-01-12
  • 打赏
  • 举报
回复
一楼正解
sagegz 2010-01-12
  • 打赏
  • 举报
回复
正则
wuyu637 2010-01-12
  • 打赏
  • 举报
回复
sscanf(s,"%d:%d.%d",min,sec,mSec);

return min*60+sec;

16,471

社区成员

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

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

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