我有一个mm/dd/yy
形式的字符数组(因为要求用户输入日期)。
如何拆分数组,删除/
,并将mm
、dd
和yy
放入 3 个不同的整数?
我会使用 sscanf 来解析字符串:
int m, d, y;
sscanf("05/18/11", "%02d/%02d/%02d", &m, &d, &y);
这会将日期解析为三个整数值。
此外,要验证输入数据的格式是否正确,还应检查 sscanf 是否返回 3,指示所有三个值都已正确解析。 请参阅以下工作示例,其中包括一些基本的错误检查。
查看strtok
并atoi
生成的令牌。
您也可以使用 sscanf
,但标记化在输入格式上提供了更大的灵活性。
#include <stdlib.h>
#include <string.h>
int main()
{
int month, day, year;
char mystr[10] = "05/18/11";
month = atoi(strtok(mystr, "/"));
day = atoi(strtok(NULL, "/"));
year = atoi(strtok(NULL, "/"));
return 0;
}
strtok() 是一个函数,它首先调用一个字符串和一个分隔符来拆分。第一次调用后,如果将 NULL 作为第一个参数传递,它将继续标记相同的字符串。 atoi
将字符串转换为整数。
如果你的输入真的很死板,sscanf 很好。
首先,找到最近的'/'
:
int i;
char *d = date;
for(i = 0; date[i] != '/'; ++i);
然后应用一个"子字符串":
strncpy(dd, date, i);
重复此过程:
d = date + i + 1;
for(; date[i] != '/'; ++i);
strncpy(mm, d, i - (d - date));
然后只需从字符串的最后一'/'
到末尾:
d = date + i + 1;
strncpy(yy, d, strlen(date) - i);