2019-03-11 by 崔斐然
atoi (表示 ascii to integer)是把字符串转换成整型数的一个函数,应用在计算机程序和办公软件中。
int atoi(const char *nptr) 函数会扫描参数 nptr字符串,会跳过前面的空白字符(例如空格,tab缩进)等。
如果 nptr不能转换成 int 或者 nptr为空字符串,那么将返回 0 [1] 。
特别注意,该函数要求被转换的字符串是按十进制数理解的。
/*
atoi (表示 ascii to integer)是把字符串转换成整型数的一个函数,应用在计算机程序和办公软件中。
int atoi(const char *nptr) 函数会扫描参数 nptr字符串,会跳过前面的空白字符(例如空格,tab缩进)等。
如果 nptr不能转换成 int 或者 nptr为空字符串,那么将返回 0 [1] 。
特别注意,该函数要求被转换的字符串是按十进制数理解的。
*/
/*
print相关:
①%d格式:用来输出十进制整数。有以下几种用法:%d:按整型数据的实际长度输出。
⑤%c格式:输出一个字符。
⑥%s格式:用来输出一个串。%s:例如:printf("%s", "CHINA")输出"CHINA"字符串(不包括双引号)
指针中的相关参数理解:
printf("%c\n",s1[0]);//从指针位置向后移动0位,带[]得到的就是地基上的内容
printf("%c\n",*s1);//打印s1的全部内容,*一般表示全部,因为定义的是char类型,
打印单个字符这里打印出的第一个字符是空格。
如果一开始定义的是int或者string 类型则会打印整个串。
printf("%d\n",&s1[0]);//&打印内存中的真实地址,真实地址是int类型整数
*/
#include <stdio.h>
int my_atoi(const char *s1){
int s = 0;//用于返回值
int t = 1;//用于记录正负号,1表示正号
int i = 0;//用于记录第几位数
while(s1[i]!='\0'){ //如果循环没到最后
if (s1[i]==' ') { //检查这一位是不是空格,是的话就把i加1,意思是检查下一位
i++;
}else break; //不是的话就结束循环
}
if(s1[i]=='+'||s1[i]=='-'){ //上一步排除了空格,也就是从第i位开始没有空格了。从这里开始检测是否包含正负号
if(s1[i] == '-') //如果这一位是-,那么t就是-1。
{
t=-1;
i=i+1; //如果有符号,位数+1
}
}
while(s1[i]!='\0'){ // 从符号位后面继续检查,直到结尾
if((s1[i] >= '0' )&& (s1[i] <= '9')){ //如果那一位上的内容属于0-9
/* 每检测到一位就把以前检测到的w数字x10,相当于拓展了一位,再加上新读取的数字。
这里的s1[i]-'0'指的是s1[i]位置上的ASCIIn码值和0的ASCII码相减得到的就是int 类型的差值。*/
s = s * 10 + s1[i] - '0';
}
else //直到读取的第s1[i]位置的字符不是0-9(可能是字母或者标点等)就终止
return t*s; //返回终止前计算好的数,并乘以符号标志t,用于表示正负号。
i++;
}
return t*s; //如果没有标点等,返回计算好的数,并乘以符号标志t,用于表示正负号。
}
int main()
{
char *s1 = " -1234a567";
int num = my_atoi(s1);
printf("%d", num);
return 0;
}