我正在尝试创建我的个人atoi功能,但我没有正常工作。我不知道为什么。
272794 and a new line.
我有点工作,但事实并非如此。它给了我一个奇怪的结果,甚至忽略了' \ n'。 它给我的结果就是这个。
27
只有我的功能,它只给我int ft_atoi(const char *str)
{
int i;
int n;
i = 0;
while (str[i] == '\t' || str[i] == ' ' || str[i] == '+' || str[i] == '-')
++i;
n = i;
while (str[n] >= '0' && str[n] <= '9')
{
++n;
}
return(str[n]);
}
。
编辑:
我创建了一个新程序。但它仍然无法奏效。它根本无法看到数字。
std::sin(radian)
答案 0 :(得分:2)
您的数字测试的边界设置错误。您正在测试str[i] > 48 && str[i] < 57
,但48是0
字符的序数,57是9
的序数。这意味着您只考虑1到8(包括1和8)为数字,并且您停止在2794fsffsf
而不是第一个9
解析f
。
将测试更改为str[i] >= 48 && str[i] <= 57
将解决边界问题,但仍然会比自我记录更少。为了明确你对那些没有记忆的ASCII表的人做了什么,你可以这样做:
while ('0' <= str[i] && str[i] <= '9')
或可能稍微慢一点,但更明显的是ctype.h
:
while (isdigit(str[i]))
您可以使用isspace(str[i])
替换许多非显而易见的空白序数值测试。