【发布时间】:2023-03-28 21:25:01
【问题描述】:
我已经构建了一个小程序,它将给定的 char 数组转换为整数:
#include <stdio.h>
int char_to_int(char* value);
int main(int argc, char* argv[])
{
if (argc != 2)
{
printf("Illegal argument count!");
return 1;
}
printf("As char array: %s\n", argv[1]);
printf("As integer: %i", char_to_int(argv[1]));
return 0;
}
int char_to_int(char* value)
{
return *value - '0';
}
问题是当我输入一个多位数字时,整数只包含一个数字,这是合乎逻辑的,但我不知道如何重写代码。而且我也不知道为什么只有第一个字符被转换。
我知道这是非常基本的东西,但我想知道如何正确实现它。
我还想避免在 STL 中使用 ato() 函数。
带有错误处理的返工代码:
#include <stdio.h>
int char_to_int(char* value);
int illegal_conversion = 0;
int main(int argc, char* argv[])
{
if (argc != 2)
{
printf("Illegal argument count!");
return 1;
}
int result = char_to_int(argv[1]);
if (illegal_conversion)
{
printf("Illegal arguments");
return 1;
}
printf("As char array: %s\n", argv[1]);
printf("As integer: %i", result);
return 0;
}
int char_to_int(char* value)
{
int result = 0;
int negative_integer = 0;
while (*value)
{
if (*value == 43)
{
*value++;
continue;
}
else if (*value == 45)
{
*value++;
negative_integer = 1;
continue;
}
else if (*value < 48 || *value > 57)
{
illegal_conversion = 1;
return 1;
}
result *= 10;
result += *value++ - '0';
}
if (negative_integer)
result *= -1;
return result;
}
【问题讨论】:
-
要转换的
atoi()函数怎么样? -
是的,这是我需要提及的另一件事。我想避免使用该功能,因为我想自己实现该转换。不过谢谢你的提及。
-
@J...S 也许他想学习 :)
-
@PeterJ 我很佩服这一点。顺便说一句,你的方法教会了我一些东西。我从来没有想过增加
char指针本身! -
查看 ASCII 表。您需要减去 48 才能得到正确的字符。
标签: c char int type-conversion