字符串的转换 是重点的重点
myatoi
数字串字符转数字要考虑10进制以上会有字母的出现
所以要将字母转换成数字
int myatoi(const char* str)
{
int tmp=0;//保存值
const char* p = str;
while (*p != '\0')
{
if (isdigit(*p))//判断是否为数字的函数
{
tmp = tmp * 10 + (*p - '0');//处理数字
}
if (isupper(*p))//判断是否为大写字母的函数
{
tmp = tmp * 10 + (*p - 'A' + 10);//处理大写字母
}
if (islower(*p))//判断是否为小写字母的函数
{
tmp = tmp * 10 + (*p - 'a' + 10);//处理小写字母
}
p++;
}
return tmp;
}
int main()
{
const char* str = "asd1234";
printf("%d\n", myatoi(str));
return 0;
}
myitoa
将数字转换成字符串(带进制转换)
核心思想是 eg 12345 简单的方法就是 取个位放入数组arr里面 然后进行数字交换
char* myitoa(int n, int index)
{
int count = 0;//计数n到底几位数
int temp = n;
while (temp!= 0)
{
temp /= index;
count++;
}
int tmp = 0;
char* arr = (char*)malloc((count*2)* sizeof(char));//创建动态内存 保存字符串
assert(arr != NULL);
if(arr==NULL)
{
return NULL;
}
int i = 0;
int sum;
while (n != 0)
{
tmp = n % index;//保存个位数的值
if (tmp > 10)
{
sum= tmp+ 'A'-10;
}
else
{
sum = tmp + '0';
}
arr[i] = sum;
n /= index;
i++;
}
arr[i] = '\0';
i--;
char tmp1 = 0; //字符数组交换的时候 应该要定义char的中间值
/* 数组交换 */
for (int j = 0; j < i; j++, i--)
{
tmp1 = arr[j];
arr[j] = arr[i];
arr[i] = tmp1;
}
return arr;
}
int main()
{
int n = 124563;
int index = 16;
char* p = myitoa(n,index);
printf("%s\n", p);
free(p);//记得释放内存
return 0;
}