//
// main.cpp
// my_atoi
//
// Created by on 14-5-6.
// Copyright (c) 2014年 yuanbo. All rights reserved.
//
/*
基础需求:
(1)‘+’、‘-’号
(2)开头空格
(3)合法性判断
(4)溢出判断
高级需求(未实现):
(1)逗号,如1,234,567
(2)进制,如0x123
(3)科学计数,1.367×10^3
*/
#include <stdio.h>
#include <stdlib.h>
long my_atoi(const char *, int &);
int main(int argc, const char * argv[])
{
int legal = 1;
char *str = "-32431245235";
long result = my_atoi(str, legal);
if (legal == 1) {
printf("%ld\n", result);
}
else {
printf("输入的字符串不合法或转换后的数值越界\n");
}
return 0;
}
/**
*功能:字符串转整形
*参数str:字符串变量;
*参数legal:字符串是否合法标识位(1-合法,0-不合法)
*返回值(result):字符串转换后的整型值
*/
long my_atoi(const char * str, int & legal)
{
legal = 1;
long result = 0;
int sign = 1; //符号位,用于标识正负数
int nptr = 0; //字符指示位
//忽略字符串开头空格
while (str[nptr] == ' ') {
nptr ++;
}
//正负号判断
if (str[nptr] == '+') {
nptr ++;
}
else if (str[nptr] == '-') {
sign = -1;
nptr ++;
}
//合法性判断
while (str[nptr] != '\0') {
if (str[nptr] > '9' || str[nptr] < '0') {
legal = 0;
break;
}
else {
result = result * 10 + (str[nptr] - '0');
nptr ++;
}
//溢出判断
if (result < 0) {
legal = 0;
break;
}
}
result = result * sign;
return result;
}
面试编程——atoi实现
最新推荐文章于 2022-04-18 22:52:12 发布