设计一个函数int stoi(char* str),将数字字符串str转换为一个整数。 main读取一个由数字字符构成的字符串放入数组,然后调用stoi函数得到转换后的整数并输出.
问题描述:
【问题描述】
设计一个函数int stoi(char* str),将数字字符串str转换为一个整数。
main读取一个由数字字符构成的字符串放入数组,然后调用stoi函数得到转换后的整数并输出。
【输入形式】
一个由数字字符构成的字符串
【输出形式】
一个整数
【样例输入】
4321
【样例输出】
4321
答
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
int atoi(char *str)
{
int i,len = strlen(str);
if(len == 0)
return 0;
int flag = 1;
int sum = 0;
if(str[0] == '-')
flag = -1;
for(i=0;i<len;i++)
{
if(str[i]>='0' && str[i]<='9')
{
sum = sum*10 + str[i] - '0';
}
else{
if(i != 0)
return 0;
}
}
return flag*sum;
}
int main()
{
char arr[20];
memset(arr,0x0,20);
gets(arr);
printf("%d\n",atoi(arr));
return 0;
}
答
#include
///没有判断正负号
int stoi(char* str)
{
if (str == NULL)
{
printf("str == NULL\n");
return 0;
}
int flag = 0;
int value = 0;
while(*str != '\0')
{
value *= 10;
///判断该字符是否是数字,如果不是数字,就退出循环
if (*str >= '0' && *str <= '9')
{
value += *str - '0';///减去字符0
}
else
{
flag = -1;
break;
}
++str;
}
if (flag != 0)
{
printf("input str error\n");
return 0;
}
return value;
}
int main()
{
char buf[10] = "4321";
int value = stoi(buf);
printf("value = %d\n", value);
char buf1[20] = {"12345789"};
value = stoi(buf1);
printf("value = %d\n", value);
char buf2[20] = {"1234d3d3"};
value = stoi(buf2);
printf("value = %d\n", value);
return 0;
}
答
C库函数strtol也可以实现你要的功能,自己写的话需要判断是否为非法字符,还有是否超过int取值范围