设计一个函数int stoi(char* str),将数字字符串str转换为一个整数。 main读取一个由数字字符构成的字符串放入数组,然后调用stoi函数得到转换后的整数并输出.

设计一个函数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取值范围