在std :: string中仅将数字转换为int

时间:2011-08-11 01:26:22

标签: c++ string int std

我正在尝试仅将字符串中的数字转换为int矢量,但这会为我提供数字0到9的ASCII代码。

有没有办法只将数字转换为整数?我想我将不得不使用一个char数组,因为atoi()不能使用std :: string而c_str()方法不能用于每个字符,只能用于整个字符串。

#include <cctype>
#include <iostream>
#include <vector>

using namespace std;

int main() {
    string chars_and_numbers = "123a456b789c0";
    vector<int> only_numbers;

    for (int i = 0; i < chars_and_numbers.length(); i++) {
        if (isdigit(chars_and_numbers[i])) {
            cout << chars_and_numbers[i] << " ";
            only_numbers.push_back(int(chars_and_numbers[i]));
        }
    }

    cout << endl;

    for (vector<int>::iterator i = only_numbers.begin(); i != only_numbers.end(); i++) {
        cout << *i << " ";
    }

    return 0;
}

输出:

1 2 3 4 5 6 7 8 9 0
49 50 51 52 53 54 55 56 57 48

2 个答案:

答案 0 :(得分:4)

ASCII Character    ASCII Code(decimal)  Literal Integer
      '0'               48                      0
      ...               ...                    ...
      '9'               57                      9

int(chars_and_numbers[i])会返回ASCII字符的基础 ASCII代码 ,而不是您想要的文字整数。

通常,如果'i' - '0'属于[0,9],i会产生i

例如'1' - '0'会在两个ASCII字符(49 - 48)的值之间返回距离,即 1

int main() {
    string chars_and_numbers = "123a456b789c0";
    vector<int> only_numbers;

    for (int i = 0; i < chars_and_numbers.length(); i++) {
        if (isdigit(chars_and_numbers[i])) {
            cout << chars_and_numbers[i] << " ";
            // here is what you want
            only_numbers.push_back(chars_and_numbers[i] - '0');
        }
    }

    cout << endl;

    for (vector<int>::iterator i = only_numbers.begin(); i != only_numbers.end(); i++) {
        cout << *i << " ";
    }

    return 0;
}

答案 1 :(得分:-1)

如果在打印整数向量时所需的输出是0到9的实际数字,则可以依赖于“0”到“9”的ASCII值是连续的这一事实:

only_numbers.push_back(char_and_numbers[i] - '0');

因此,'8'变为'8' - '0',或56 - 48,即8。