1.atio()
题目:将字符串转换为整形,函数形式:int StrtoInt(char *string)
如果你将代码写成如下的形式:恭喜你,你被刷了,哈哈。
int StrtoInt(char *string)
{
int sum = 0;
char *p= NULL;
p = string;
while(NULL! == *p )
{
sum = sum*10 + (*p - '0')'
p++;
}
return sum;
}
其实面试官想让你解决的问题包括以下几点:
1.输入的字符串中包含字母以及其他非法字符
2.输入的字符包含正负号
3.要考虑最大的正整数以及最小的负整数小心溢出。
4.输入字符串不能转换为正数时怎么处理
5.输入空指针时怎么处理
int atoi(const char *s)
{
int dat = 0;
bool neg = false;
if (*s == '-')
{
s++;
neg = true;
}
while(*s)
{
dat *=10;
if (*s >= '0' ||*s <= '9')
dat+= *s - '0';
else
return -1;
s++;
}
return neg ? (-1*dat) : dat;
}
【代码更近一步改进】
/*********************************************************************
写代码应该注意事项:
1.输入的字符串中包含字母以及其他非法字符
2.输入的字符包含正负号
3.要考虑最大的正整数以及最小的负整数小心溢出。
4.输入字符串不能转换为正数时怎么处理
5.输入空指针时怎么处理
6.输入字符串包含为”\0”
**********************************************************************/
#include<stdio.h>
#include<assert.h>
#define INT_MAX((int)0x7fffffff)
#define INT_MIN((int)0x80000000)
int my_atoi(char * s)
{
long long result = 0;
bool reg= false;
//判断输入合法性
if(s ==NULL || *s == '\0')
{
printf("输º?入¨?为a空?");
return-1;
}
//跳过前边空格
while(*s== ' ') //while(isspace(*s)== 0){ s++;}
{
s++;
}
//判断正负号
if(*s == '-')
{
reg = true;
}
if(*s == '+' || *s == '-')
{
s++;
}
//计算部分
while(*s!= '\0')
{
if(*s>= '0'&& *s<= '9')
{
result = result*10 + (*s - '0');
if((reg&& result < INT_MIN) ||(!reg && result > INT_MAX))
{
return -2;//越界
}
}
else
{
return-3;//非法字符
}
s++;
}
returnreg? (result *(-1)):result;
}
int main(int argc,char*argv[])
{
chara[40]={0};
intresult;
printf("输字符数:");
gets(a);
result = my_atoi(a);
printf("%d",result);
return 0;
}
2.itoa()
//num:待转换的整型变量 str:指向存放结果 radix:基数
char *itoa(int num, char *str, int radix)
{
const chartable[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char *ptr = str;
if (num == 0)
{ //数值为时
*ptr++= '0';
*ptr ='\0';
return str;
}
bool neg = false;
if (num < 0)
{ //数值小于时,添加负号,并将指针后移
neg = true;
num *= -1;
*ptr++= '-';
}
while (num)
{
*ptr++ =table[num % radix];
num /=radix;
}
*ptr = '\0';
//反转字符串
char *beg = (neg ? str +1 : str);
ptr--;
while (beg < ptr)
{
int temp = *beg;
*beg = *ptr;
*ptr = temp;
beg++;
ptr--;
}
return str;
}