C 由于特殊字符,atoi()未转换整个字符串
我的.txt文件中有数据,其中包含员工的不同时间输入和超时。例如,C 由于特殊字符,atoi()未转换整个字符串,c,C,我的.txt文件中有数据,其中包含员工的不同时间输入和超时。例如,10:20,但我最初设计的结构使其数据类型为字符数组或字符串。因为我将在另一个函数中使用时间值,所以我必须使用atoi()函数将它们转换为整数值。问题是,每个时间值中都有一个冒号:。是否可以使用atoi()将字符串10:20转换为整数,以便在将来的函数中使用它?atoi()的使用是否允许进行拆分或排序,以便将时间值从字符串转换为int 我试过了 char time[10] = "10:20"; int val
10:20
,但我最初设计的结构使其数据类型为字符数组或字符串。因为我将在另一个函数中使用时间值,所以我必须使用atoi()函数将它们转换为整数值。问题是,每个时间值中都有一个冒号:
。是否可以使用atoi()将字符串10:20
转换为整数,以便在将来的函数中使用它?atoi()的使用是否允许进行拆分或排序,以便将时间值从字符串转换为int
我试过了
char time[10] = "10:20";
int val;
printf("string val = %s, int value = %d", time, atoi(time));
但我的输出只是
string val=10:20,int value=10
,因此仅读取:
之前的字符串并将其转换为字符串。我希望在转换后,仍然有10:20作为结果,但是整数,因为我将使用关系运算符。不清楚您实际想要什么,但可能类似于:
#include <stdio.h>
#include <stdlib.h>
int
main(int argc, char **argv)
{
char *time = argc > 1 ? argv[1] : "10:20";
int d;
char *e;
d = strtol(time, &e, 10);
if( *e == ':' ){
d *= 100;
d += strtol(e + 1, &e, 10);
}
if( *e != '\0' ){
fprintf(stderr, "invalid input\n");
return 1;
}
printf("string val = %s, int value = %d\n", time, d);
return 0;
}
#包括
#包括
int
主(内部argc,字符**argv)
{
char*time=argc>1?argv[1]:“10:20”;
int d;
char*e;
d=标准时间(时间,&e,10);
如果(*e==':'){
d*=100;
d+=strtol(e+1和e,10);
}
如果(*e!='\0'){
fprintf(stderr,“无效输入”);
返回1;
}
printf(“字符串val=%s,int值=%d\n”,时间,d);
返回0;
}
这将为字符串“10:20”生成
d=1020
。我一点也不清楚您想要生成什么整数,但这似乎就是您想要的。您也可以使用sscanf
:
#include <stdio.h>
int main() {
char const* time = "10:20";
int h, m;
if (sscanf(time, "%d:%d", &h, &m) != 2)
return 1;
printf("string val = %s, int value = %d\n", time, h * 100 + m);
}
#包括
int main(){
字符常量*time=“10:20”;
int h,m;
如果(sscanf(时间,%d:%d,&h,&m)!=2)
返回1;
printf(“字符串val=%s,int值=%d\n”,时间,h*100+m);
}
“我必须使用atio()函数将它们转换为整数值”。不,你没有。事实上,您永远不应该使用atoi
,因为它会在某些输入上产生未定义的行为。使用strtol
@Nic:当time==“10:20”
时,您希望val
的内容是什么?您希望使用什么整数来表示字符串“10:20”?您想将其转换为午夜后几分钟、午夜后几秒、包含日期的纪元时间还是其他时间?@williampersell问题仍然存在,无论我是否使用strtol。我的10:20字符串仅在转换后变为10。strtol
将在10
之后告诉您字符的地址。检查这是否为:”
,转到下一个字符,然后使用第二次调用strtol
转换20
。或者,如果可以修改字符串,请使用strtok
将其拆分为由:
分隔的标记。谢谢。这对我有用。同时,mediocrevegetable1的解决方案在使用atoi()时也能起作用。@Niic必须非常小心atoi
。90年代中期以后编写的任何代码都不应该使用它。