免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 8483 | 回复: 11
打印 上一主题 下一主题

将固定格式的数字型字符串转换为日期型字符串格式 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-03-21 16:57 |只看该作者 |倒序浏览
要将字符串"20110321"转换为字符串"2011-03-21",我利用下面的代码进行了转换,感觉好费事,大家有没有更简单的方法?
char a="20110321";
char firstText[11]={0};
char dates[11]={0};       
char years[5]={0};
char months[3]={0};
char days[3]={0};
sscanf(a,"%4s%2s%2s",years,months,days);
strcat(firstText,years);
strcat(firstText,"-");
strcat(firstText,months);
strcat(firstText,"-");
strcat(firstText,days);

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2011-03-21 18:51 |只看该作者
回复 1# sgxg_1999


    c  语言没有发现 , java 几行程序搞定

论坛徽章:
0
3 [报告]
发表于 2011-03-21 19:31 |只看该作者
回复 1# sgxg_1999


char a="20110321";//你这里有问题吧!!!
char firstText[11]={0};
char dates[11]={0};        
char years[5]={0};
char months[3]={0};
char days[3]={0};
sscanf(a,"%4s%2s%2s",years,months,days);
==============================
strcat(firstText,years);
strcat(firstText,"-");
strcat(firstText,months);
strcat(firstText,"-");
strcat(firstText,days);
这段完全可以用一个函数来解决:
sprintf(firstText,"%s-%s-%s", dates, months, days);
======================

纯C里面没有求子串的函数如char *substr(char*, int, int),不过可以自己实现一个,一般在做项目时都会有这种接口吧。
这样就可以简化为一个语句:

sprintf(firstText,"%s-%s-%s", substr(a, 0, 3), substr(a, 4, 5), substr(a, 6, 7));

论坛徽章:
0
4 [报告]
发表于 2011-03-21 19:47 |只看该作者
可以考虑插入两个“-”来解决 不过感觉代码也不少 呵呵

论坛徽章:
0
5 [报告]
发表于 2011-03-21 21:23 |只看该作者
回复 3# 吴秦


    谢谢!

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
6 [报告]
发表于 2011-03-21 22:20 |只看该作者
回复  吴秦


    谢谢!
sgxg_1999 发表于 2011-03-21 21:23



    调用了那么多库函数。不如用字符和数组操作一下。
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main(void)
  4. {
  5.     char *string = "20110321";
  6.     char new_str[10] = {0};
  7.     int  i = 0;
  8.     while (*string != '\0') {
  9.           if (i == 4 || i == 7) {
  10.                 new_str[i] = '-';
  11.           } else {
  12.                 new_str[i] = *string;
  13.                                 string++;
  14.                   }
  15.           i++;
  16.     }
  17.         new_str[++i] = '\0';
  18.     printf("New string is: %s\n", new_str);
  19.     exit(0);
  20. }
复制代码

论坛徽章:
0
7 [报告]
发表于 2011-03-22 09:02 |只看该作者
回复 6# L_kernel


    嗯!这也是一种方法!

论坛徽章:
1
CU十二周年纪念徽章
日期:2013-10-24 15:41:34
8 [报告]
发表于 2011-03-22 09:29 |只看该作者
用C++吧

论坛徽章:
0
9 [报告]
发表于 2011-03-22 10:18 |只看该作者
本帖最后由 雨夜流星 于 2011-03-22 10:22 编辑

LZ说是固定格式,所以我弄个最基础的哈,
{:3_185:}

  1.     char *str     = "20110321";
  2.     char  tmp[12] = {0};

  3.     snprintf(tmp,     5, "%s",  str);
  4.     snprintf(tmp + 4, 4, "-%s", str + 4);
  5.     snprintf(tmp + 7, 4, "-%s", str + 6);
  6.    
  7.     printf("%s\n", tmp);
复制代码

论坛徽章:
0
10 [报告]
发表于 2011-03-22 10:21 |只看该作者
substr的功能和
snprintf + 指针偏移差不多吧?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP