从ASCII字符打印整数值

时间:2015-04-09 06:39:20

标签: c++ arrays

我正在尝试在c ++中实现函数stoi()。我创建了一个int数组arr来存储char_arr所有元素的整数ASCII。如果我从我的char_arr数组中打印值,因为它是一个字符数组,这样可以正常工作。但是,如何将char数组中的整数值传递给int数组并仅打印数字而不打印它们的ASCII?

代码:

int stoi(){
        int *arr = new int [strlen(char_arr)];
        for (int i=0; char_arr[i]!='\0'; ++i){
            arr[i] = char_arr[i];
        }
        for (int i=0; char_arr[i] != '\0'; ++i){
            if (arr[i] >= 48 && arr[i] <= 57){
                cout << char_arr[i];
            }
        }

    }

3 个答案:

答案 0 :(得分:0)

首先,删除第一个循环并直接使用char_arr。您无需按int即可使其正常工作。

对于打印int值,您可以使用:

for (int i = 0; char_arr[i] != '\0'; ++i) {
  if (char_arr[i] >= '0' && char_arr[i] <= '9') { //I would suggest you to use this syntax instead of raw ASCII codes.
    cout << (char_arr[i] - '0');
  }
}

答案 1 :(得分:0)

int stoi(){
    /* if you do not use arr.
    int *arr = new int[strlen(char_arr)];
    for (int i = 0; char_arr[i] != '\0'; ++i){
        arr[i] = char_arr[i];
    }
    */
    int sign = 1, value = 0;
    if (*char_arr == '+') {
        ++char_arr;
    }
    else if (*char_arr == '-') {
        ++char_arr;
        sign = -1;
    }
    while (*char_arr) {
        if (*char_arr >= '0' && *char_arr <= '9') {
            value = value * 10 + *char_arr - '0';
            ++char_arr;
        } else {
            break;
        }
    }
    return sign * value;
}

答案 2 :(得分:0)

这是我提出的那个:

#include <cstdio>
#include <cstring>

#define _BASE_  10

int main(int argc, char **argv)
{
    char ascii[] = "474927";
    signed int value = 0;

    signed int ascii_len = strlen(ascii);

    int pos = 0;
    for(signed int i = ascii_len-1; i >= 0; i--)
    {
        if(i == 0 && ascii[i] == '-')
        {
            value *= -1;
            continue;
        }

        int base = 1;

        if(pos > 0)
        {
            base = _BASE_;

            for(int j = 1; j < pos; j++)
                base *= _BASE_;
        }

        value += base * (ascii[i] - 48);
        pos++;
    }

    printf("Value: %d\n", value);

    return 0;
}