试图在c

时间:2017-11-17 22:12:53

标签: c strtok

所以我需要能够输入一个字符串作为电话号码,如下所示: (555)-444-3333。 之后,我需要使用strtok删除括号和短划线,并将字符串区域代码和电话号码的其余部分转换为整数并将它们一起打印出来 我的问题是使用strtok来摆脱(因为如果我不知道区号将在它转换成int时打印0。这就是我所拥有的:

int main()
{
phone[14];
int* area_code;
int* digits;
int* i, j;

printf("Enter a phone number: ");
scanf("%s", phone);

strtok( phone, "(" );
area_code = strtok( phone, ")" );
j = atoi(area_code);

printf("%d", j);

while((digits = strtok(NULL, "-")) != NULL )
{
i = atoi(digits);
printf("%d", digits);
}

return 0;
}

2 个答案:

答案 0 :(得分:3)

问题就在这里:

strtok( phone, "(" );
area_code = strtok( phone, ")" );

因为第二个调用传递非NULL指针,它不会继续处理第一个字符串,它从传递的指针开始,现在是一个长度为零的字符串。

在任何情况下,覆盖正在解析的字符串都是错误的样式。如果您使用strtol,则单个调用将为您提供一组数字的数值和数字后面的指针,您可以在此处开始处理下一组数字。

但是,如果您打算将数字打印出来,则根本不需要数字转换。只需删除所有标点符号。

尽管有5/6个字符相同,但strtok不属于str - to - x 系列函数。这些是strtol返回一个长整数,strtod返回一个双精度。

答案 1 :(得分:0)

strtok来电中,将分隔符指定为"()-"

祝你好运。