这是在C中拆分字符串的最佳方法吗?

时间:2017-06-02 00:13:22

标签: c arrays string

我看到我的一个朋友分裂并将一个字符串复制到另一个字符串中。

char str[] = "05/09/2013";
char day[3];
char month[3];
char year[5];

memset(day, 0, sizeof(day));
memset(month, 0, sizeof(month));
memset(year, 0, sizeof(year));

month[0] = str[0];
month[1] = str[1];
day[0]   = str[2];
day[1]   = str[3];
year[0]  = str[4];
year[1]  = str[5];
year[2]  = str[6];
year[3]  = str[7];

month[2] = '\0';
day[2]   = '\0';
year[4]  = '\0';

我听说过strtokstrsep,但上述复制方式有什么问题?如果我继续使用上述方法,我将面临哪些问题?

2 个答案:

答案 0 :(得分:3)

首先,这是一个破碎的方式,正如这个小样本所示:

COPY

输出:

  

$ ./splitdate
  /0.05.9/20

哦,对了,你的指数错了!

因此,您会看到解决方案的第一个也是最重要的缺点:难以维护。在性能方面,它可能接近最佳状态,但实际上,性能不是一个问题具有如此荒谬的小数据集。

如果您不介意修改原始字符串,strtok()是您最好的选择。如果您的要求更复杂,请编写自己的解析器。

使用#include <stdio.h> #include <string.h> int main(void) { char str[] = "05/09/2013"; char day[3]; char month[3]; char year[5]; memset(day, 0, sizeof(day)); memset(month, 0, sizeof(month)); memset(year, 0, sizeof(year)); month[0] = str[0]; month[1] = str[1]; day[0] = str[2]; day[1] = str[3]; year[0] = str[4]; year[1] = str[5]; year[2] = str[6]; year[3] = str[7]; month[2] = '\0'; day[2] = '\0'; year[4] = '\0'; printf("%s.%s.%s\n", day, month, year); return 0; } 修改代码:

strtok()

输出:

  

$ ./splitdate
  2013年9月5日

正如您所见,简短,简洁,无错误。

答案 1 :(得分:0)

char *strsep(char **stringp, const char *delim)将字符串从开头拆分为第一次出现delim。返回剪切字符串,但在传递时修改stringp。