|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
2. C 语言中有个 atoi 函数(定义于 <stdlib.h> 头文件中),用于将字符串中的值解析为对应的整型数字。现在要求我们自己写一个程序,实现类似的功能。
基本要求:Powered by bbs.fishc.com
A. 将用户输入的字符串中代表数字的字符转换为整型数值4O]0QM
B. 打印转换结果来自:bbs.fishc.com
C. 只打印第一组数字来自:bbs.fishc.com
提示:你可以使用 break 语句在适当的时候跳出循环。
我的写法是:
#include<stdio.h>
#include<stdlib.h>
int main()
{
char a[100];
int i,b;
printf("请输入一行英文字母:");
scanf("%s",a);
for(i=0;i<100;i++)
{
if(!(a>='0'&&a<='9')&&(a!=' '))
a=' ';//将不是数字或者空格的字符换成空格。
else
break; //第一次遇见数字或空格时跳出循环,计算整型数。
}
b=atoi(a);
printf("整数是%d i=%d",b,i);//putchar(b);这样不行,
return 0;
}
//问题,输入【 123.45时,结果为0?
为什么输入【 123时候结果为零呢?
- $ cat main.c
- #include <stdio.h>
- int atoi(char* str) {
- int res;
- for (int i = 0; str[i] != '\0'; ++i)
- res = res * 10 + str[i] - '0';
- return res;
- }
- int main(void) {
- char *str = "123456789";
- //printf("%d", atoi(str));
- printf("%d\n", atoi(str));
- }
- $ gcc-debug -o main main.c
- $ ./main
- main.c:6:19: runtime error: signed integer overflow: -338770695 * 10 cannot be represented in type 'int'
- 261244693
- $ ./main
- main.c:6:19: runtime error: signed integer overflow: -1395735303 * 10 cannot be represented in type 'int'
- 261244693
- $ ./main
- main.c:6:19: runtime error: signed integer overflow: 1219413241 * 10 cannot be represented in type 'int'
- -812497131
- $ ./main
- main.c:6:19: runtime error: signed integer overflow: 982435065 * 10 cannot be represented in type 'int'
- -1886238955
- $ ./main
- main.c:6:19: runtime error: signed integer overflow: -628177671 * 10 cannot be represented in type 'int'
- -1886238955
- $ ./main
- main.c:6:19: runtime error: signed integer overflow: 621724921 * 10 cannot be represented in type 'int'
- -1886238955
- $ ./main
- main.c:6:19: runtime error: signed integer overflow: 344900857 * 10 cannot be represented in type 'int'
- -1886238955
- $ ./main
- main.c:6:19: runtime error: signed integer overflow: 604947705 * 10 cannot be represented in type 'int'
- -1886238955
- $ ./main
- main.c:6:19: runtime error: signed integer overflow: 602850553 * 10 cannot be represented in type 'int'
- 1334986517
- $ ./main
- main.c:6:19: runtime error: signed integer overflow: 1076806905 * 10 cannot be represented in type 'int'
- -812497131
- $ ./main
- main.c:6:19: runtime error: signed integer overflow: 1831781625 * 10 cannot be represented in type 'int'
- -812497131
- $ ./main
- main.c:6:19: runtime error: signed integer overflow: 997115129 * 10 cannot be represented in type 'int'
- 1334986517
- $ vim main.c
- $ cat main.c
- #include <stdio.h>
- int atoi(char* str) {
- //int res;
- int res = 0;
- for (int i = 0; str[i] != '\0'; ++i)
- res = res * 10 + str[i] - '0';
- return res;
- }
- int main(void) {
- char *str = "123456789";
- //printf("%d", atoi(str));
- printf("%d\n", atoi(str));
- }
- $ gcc-debug -o main main.c
- $ ./main
- 123456789
- $ ./main
- 123456789
- $ ./main
- 123456789
- $ ./main
- 123456789
- $
复制代码
|
|