int myAtoi2(char *str)
{
int number = 0;
char *ptr = str;
if ( *ptr == '-' ) {
number = number - ( *++ptr - '0' );
ptr++;
}
while ( isdigit ( *( ptr ) ) ){
if ( number < 0 ) {
number = number * 10 - (*ptr++ - '0');
}
else
number = number * 10 + (*ptr++ - '0');
}
return number;
}
有什么方法可以让我自己的 atoi 更好(也许是干净的代码和更好的性能)?
最佳答案
它可以像这样从根本上简化。您只需要解析字符串一次,并维护一个值。这是针对无符号
值的。如果您想要负数和范围检查,则需要在代码中添加更多内容。
#include <stdio.h>
#include <ctype.h>
unsigned myOwnAtoi( char *str )
{
unsigned number = 0;
char *ptr = str;
while(isdigit(*ptr)) {
number = number * 10 + *ptr++ - '0';
}
return number;
}
int main(void)
{
printf("%u\n", myOwnAtoi("123456"));
return 0;
}
程序输出:
123456
关于c - 优化我自己的atoi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37120476/