我正在尝试仅将字符串中的数字转换为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
答案 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。