#define TIME_TAB_MAX 245
char g_time_tab[TIME_TAB_MAX ][6] = {
"13:46",
"08:23",
"23:12",
"05:59",
...
"09:13",
"12:00",
"02:42",
"22:29",
...
...
};
char g_sleep_time[6] = {
"21:30"
};
用C语言编写函数,从g_time_tab 中找出最接近g_sleep_time的时间,并且printf 出结果。
在编码之前,首先需要明确的是:如果有多个最近的时间,也必须打印出。我是这样解决的:
1、将所有的时间转换为“秒”。
2、将需要查找的时间和表中的时间进行对比,对比的时候注意是绝对值的对比。
3、如果有相同的最近时间,则将索引全部存储于一个数组中,保存个数。
char g_time_tab[TIME_TAB_MAX ][6] = {
"13:46",
"08:23",
"23:12",
"05:59",
...
"09:13",
"12:00",
"02:42",
"22:29",
...
...
};
char g_sleep_time[6] = {
"21:30"
};
用C语言编写函数,从g_time_tab 中找出最接近g_sleep_time的时间,并且printf 出结果。
在编码之前,首先需要明确的是:如果有多个最近的时间,也必须打印出。我是这样解决的:
1、将所有的时间转换为“秒”。
2、将需要查找的时间和表中的时间进行对比,对比的时候注意是绝对值的对比。
3、如果有相同的最近时间,则将索引全部存储于一个数组中,保存个数。
当然,我这个可能不是最优的做法,源码如下:
#include <stdio.h>
#define TIME_TAB_MAX 10
int count = 0;
char g_time_tab[TIME_TAB_MAX][6] =
{
"05:08",
"17:54",
"21:32",
"07:08",
"07:00",
"22:22",
"15:43",
"23:56",
"02:01",
"04:12",
};
int SearchTimeFormTab(int srcTime,int* srcTimeTab,int *retTime)
{
int iTemp = 0;
int min = 0;
int jTemp = 0;
min = *(srcTimeTab + 0) - srcTime;
retTime[jTemp ++] = 0;
for (iTemp = 1;iTemp < TIME_TAB_MAX;iTemp ++)
{
if(abs(min) == abs(*(srcTimeTab + iTemp) - srcTime))
{
retTime[jTemp ++] = iTemp;
continue;
}
if(abs(min) > abs(*(srcTimeTab + iTemp) - srcTime))
{
min = *(srcTimeTab + iTemp) - srcTime;
memset(retTime,0,sizeof(retTime));
jTemp = 0;
retTime[jTemp ++] = iTemp;
}
}
return jTemp;
}
int Time2Sec(char* time)
{
short iTemp = 0;
short jTemp = 0;
char timestr[3][3] = {0};
while(*(time + iTemp))
{
if ((*(time + iTemp) < '0') || (*(time + iTemp) > '9'))
{
strncpy(timestr[jTemp ++],time + iTemp - 2,2);
}
iTemp ++;
}
strncpy(timestr[jTemp],time + strlen(time) - 2,2);
return atoi(timestr[0]) * 3600 + atoi(timestr[1]) * 60 + atoi(timestr[2]);
}
void SearchTimeInfo(const char* srcTime,int *retTime)
{
int sec_Time_Tab[TIME_TAB_MAX] = {0};
int src_Time_Temp = 0;
int iTemp = 0;
src_Time_Temp = Time2Sec(srcTime);//转化为秒
for (iTemp = 0;iTemp < TIME_TAB_MAX;iTemp ++)
{
sec_Time_Tab[iTemp] = Time2Sec(g_time_tab[iTemp]);
}
count = SearchTimeFormTab(src_Time_Temp,sec_Time_Tab,retTime);//在表中查找
}
int main(void)
{
char g_sleep_time[6] = {"07:04"};
int retTime[TIME_TAB_MAX] = {0};
int iTemp = 0;
SearchTimeInfo(g_sleep_time,retTime);//查询
for (iTemp = 0;iTemp < count;iTemp ++)
{
printf("%s\n",g_time_tab[retTime[iTemp]]);
}
getch();
return 0;
}