赞
踩
库函数atoi(),将所指向的字符串转换为一个整数(类型为int型)
目录
声明
int atoi(const char *str)参数 str -- 要转换为整数的字符串。
返回值 函数返回转换后的长整数,如果没有执行有效的转换,则返回零。
头文件 <stdlib.h>
注意 atoi的规则是:跳过不可见字符,碰到负号或者数字开始转换,转换到非数字字符为止。
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
-
- int main()
- {
- int val;
- char str[20];
-
-
- strcpy(str, "989934896");
- val = atoi(str);
- printf("字符串值 = %s, 整型值 = %d\n", str, val);
-
- strcpy(str, "123runoob.com");
- val = atoi(str);
- printf("字符串值 = %s, 整型值 = %d\n", str, val);
-
- return(0);
- }

- int main()
- {
- char arr[20] = " -12a34";
- int ret = my_atoi(arr);
- printf("%d\n", ret);
-
- return 0;
- }
先把主函数函数写好,下面来考虑字符串出现的可能形式
字符串中可能出现:
1.数字形式的字符
2.空指针
3.空字符串
4.非数字字符
5.前面有空白字符
6.前面有+-
下面来实现
- #include<assert.h>
- #include<ctype.h>
- #include<limits.h>
- enum status
- {
- VALID,
- INVALID
- }status=INVALID;//非法
- int my_atoi(const char* str)
- {
- int flag = 1;
- //空指针
- assert(str);
- //字符串为空
- if (*str == '\0')
- {
- return 0;
- }
- //空白字符
- while (isspace(*str))
- {
- str++;
- }
- //正负号
- if (*str == '+')
- {
- flag = 1;
- str++;
- }
- else if(*str=='-')
- {
- flag = -1;
- str++;
- }
- //数字字符
- long long n = 0;
- while (*str!='\0')
- {
- if (isdigit(*str))
- {
- n = n * 10 +flag*(* str - '0') ;//存放比整型更大的值
- if (n<INT_MIN || n>INT_MAX)
- {
- n= 0;
- break;
- }
- }
- else
- {
- break;
- }
- str++;
- }
- if (*str == '\0')
- {
- status = VALID;
- }
-
- return (int)n;
- }
- int main()
- {
- char arr[20] = " -12a34";
- int ret = my_atoi(arr);
- if (status == VALID)
- printf("合法转化:%d\n", ret);
- else
- {
- printf("非法转化:%d\n", ret);
- }
-
-
- return 0;
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。