我有一个从日期转换数字的作业。
我们将日期作为字符串,例如18.2.2014,我需要提取整数18,2,2014。
我的方式并不完美...
您认为最好的方式是什么?
void luckChoice(char a[]){
int month=10*(a[3]-'0')+(a[4]-'0');
int day=(a[0]-'0')*10+(a[1]-'0');
int year=(a[9]-'0')+(a[8]-'0')*10+(a[7]-'0')*100+(a[6]-'0')*1000;
答案 0 :(得分:1)
我不知道你是否对它好,但你可以直接在scanf()
本身做到这一点。
只需输入
即可if (scanf("%d.%d.%d", &dd, &mm, &yy) == 3) { …OK… } else { …failed… }
这会忽略'。'来自指定顺序的输入。
否则你可以使用sscanf()函数,如下所示:
void luckChoice(char a[]){
int dd,mm,yy;
sscanf(a,"%d.%d.%d",&dd,&mm,&yy);
}
答案 1 :(得分:0)
有很多方法可以解决这个问题。一个简单的问题是应该使用多少代码来检测无效输入?
保持C标准库,代码可以多次处理字符串并捕获许多错误。
// Expand the f() signature
// void luckChoice(char a[]){
int luckChoice(const char a[], int *year, int *month, int *day) {
检查格式。 "%n"
保存扫描的偏移量,如果它到达那么远。 "%*2[0-9]"
匹配1或2位数,但不保存结果。这与"%d"
不同,'+'
允许引号空格和'-'
或 int n = 0;
sscanf(a, "%*2[0-9].%*2[0-9].%*4[0-9]%n", &n);
。
n
如果 if (n > 0 && a[n] == '\0') {
sscanf(a, "%d.%d.%d", day, mon, year);
// check ranges if desired
if (*day < 1 || *day > 31) return 0;
if (*mon < 1 || *mon > 12) return 0;
// additional checks
TDB_Code();
return 1; // success
}
return 0; // failure
}
非零,则扫描完全成功。所以,如果这是字符串的结尾,那么 - 哦,快乐的一天!
import json
param1 = "xxxxxx"
param2 = "11111111111111"
param3 = "333333333"
with open('data/'+param1+'.json') as json_data:
data = json.load(json_data)
for a in data:
a.remove(param2)
with open('data/'+param1+'.json','w','utf-8') as f:
json.dump(data, f, sort_keys=True, indent=4,ensure_ascii=False)