字符串到Int没有atoi / isdigit

时间:2016-02-11 05:50:31

标签: c type-conversion

我在这里绝对疯狂。我已经尝试了一个多小时。如何在不使用atoiatolisdigit之类的情况下将字符串转换为数组?

假设我有一个const char *str和一个int *converted_val作为参数。

以下是我所拥有的:

const char *c;
    for(c = str; (*c != '\0') && isdigit(*c); ++c){
                    *converted_value = *converted_value*10 + *c - '0';
    }
    return true;

但是再一次,如果没有isdigit,我就无法做到。而且我不确定如何处理大的字符串(例如:" 10000000000000000")

4 个答案:

答案 0 :(得分:3)

isdigit(*c)代替*c >= '0' && *c <= '9'

const char *c;
....
for( c = str; *c != '\0' && *c >= '0' && *c <= '9'; ++c) {
    *converted_value = (*c - '0') + *converted_value*10;
}
return true;

请注意,'0''9'的ASCII符号按升序排列。

您受限于converted_value的整数数据类型的范围。

答案 1 :(得分:2)

int yetAnotherAtoi(char *str)
{
 int res = 0; // Initialize result

 // Iterate through all characters of input string and
 // update result
 for (int i = 0; str[i] != '\0'; ++i) {
     if (str[i]> '9' || str[i]<'0')
         return -1; # or other error...
     res = res*10 + str[i] - '0';
 }

 // return result.
 return res;
}

答案 2 :(得分:2)

变化:

int *converted_val

long int *converted_val

为更大的值提供更多空间。您还可以考虑添加代码来检查输入字符串是否会溢出输出变量。

答案 3 :(得分:0)

如果你想在Visual Studio中没有使用函数的字符串到整数,你可以像下面的代码一样:

#include "stdafx.h"
#include<iostream>
#include<string>
#include<conio.h>
using namespace std;

int main()
{

    std::string str ;
    getline(cin, str);
    int a = 0;
    for (int i = 0  ; i<str.length(); i++) {
        a = (int)(str[i] - 48) + a * 10;
    }
    cout << a;

    _getch();
    return 0;
}