我看到我的一个朋友分裂并将一个字符串复制到另一个字符串中。
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';
我听说过strtok
和strsep
,但上述复制方式有什么问题?如果我继续使用上述方法,我将面临哪些问题?
答案 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。