如何将多个字符转换为十进制值?
How to convert multiple chars to decimal value?
我正在尝试执行以下操作:
我有一个字符向量,如下所示:{ '3' '2' 'a' '4' '4' 'a' '9' }.
('a' 只是我添加到向量中的一个占位符,用于表示一个值在哪里结束,另一个值在哪里开始)
我不知道如何将字符 3 和 2 转换为实际的十进制值 32 等等 44(9 并不难。)
现在,在你们将此评价为重复或 "we won't do your homework" 评论开始出现之前,我想让你们知道我已经省略了所有其他步骤,我已经 成功 完成以节省你我的时间。我知道 atoi 存在于 C++ 中,但我们不允许使用它们(以及任何 find_first_of 或任何类型的库函数)。我相信 ascii 可以完成这项工作,但似乎无法弄清楚。
谢谢。
您缺少的直观飞跃是 char 只是您用来对某种符号进行编码的数字,因此它具有值。计算出数字 0-9 的值,您可以使用它来将 char 类型的值转换为 int 类型的值。 (例如,Richard 上面的示例是一种方法。)
然后你就有了你的数字,只需从中推导出数字即可。
字符3
在ASCII中是十进制的51。 ascii 中的 0->9
是十进制中的 48-57
。因此,要取回实际数字,您只需要从每个 char c
中减去 48。
char c = '3';
printf("%d\n",c-48);
如果要拼接字符,可以看strcat
- 将出现的所有
'a'
替换为 ' '
。
- 用
std::istringstream
. 拆分字符串
- 为每个元素调用
std::stoi()
函数。
代码示例:
#include <string>
#include <vector>
#include <iostream>
#include <sstream>
#include <algorithm>
std::vector<int> convert(const std::vector<char> & a) {
std::string s(a.begin(), a.end());
std::replace(s.begin(), s.end(), 'a', ' ');
std::vector<int> result;
std::istringstream iss(s);
std::string number;
while (iss >> number) {
result.push_back(stoi(number));
}
return result;
}
int main() {
std::vector<char> a = {'3', '2', 'a', '4', '4', 'a', '9', '2'};
std::vector<int> result = convert(a);
for (int elem : result) {
std::cout << elem << " ";
}
return 0;
}
输出:
32 44 92
这里是提示:在十进制数字系统中,当你从右向左移动数字时。它乘以 10。
例如{3, 2}可以这样转换:
x = 0;
第一次迭代:
x = x * 10 + 3 // 3
第二次迭代:
x = x * 10 + 2 // 32
我正在尝试执行以下操作: 我有一个字符向量,如下所示:{ '3' '2' 'a' '4' '4' 'a' '9' }.
('a' 只是我添加到向量中的一个占位符,用于表示一个值在哪里结束,另一个值在哪里开始)
我不知道如何将字符 3 和 2 转换为实际的十进制值 32 等等 44(9 并不难。)
现在,在你们将此评价为重复或 "we won't do your homework" 评论开始出现之前,我想让你们知道我已经省略了所有其他步骤,我已经 成功 完成以节省你我的时间。我知道 atoi 存在于 C++ 中,但我们不允许使用它们(以及任何 find_first_of 或任何类型的库函数)。我相信 ascii 可以完成这项工作,但似乎无法弄清楚。
谢谢。
您缺少的直观飞跃是 char 只是您用来对某种符号进行编码的数字,因此它具有值。计算出数字 0-9 的值,您可以使用它来将 char 类型的值转换为 int 类型的值。 (例如,Richard 上面的示例是一种方法。)
然后你就有了你的数字,只需从中推导出数字即可。
字符3
在ASCII中是十进制的51。 ascii 中的 0->9
是十进制中的 48-57
。因此,要取回实际数字,您只需要从每个 char c
中减去 48。
char c = '3';
printf("%d\n",c-48);
如果要拼接字符,可以看strcat
- 将出现的所有
'a'
替换为' '
。 - 用
std::istringstream
. 拆分字符串
- 为每个元素调用
std::stoi()
函数。
代码示例:
#include <string>
#include <vector>
#include <iostream>
#include <sstream>
#include <algorithm>
std::vector<int> convert(const std::vector<char> & a) {
std::string s(a.begin(), a.end());
std::replace(s.begin(), s.end(), 'a', ' ');
std::vector<int> result;
std::istringstream iss(s);
std::string number;
while (iss >> number) {
result.push_back(stoi(number));
}
return result;
}
int main() {
std::vector<char> a = {'3', '2', 'a', '4', '4', 'a', '9', '2'};
std::vector<int> result = convert(a);
for (int elem : result) {
std::cout << elem << " ";
}
return 0;
}
输出:
32 44 92
这里是提示:在十进制数字系统中,当你从右向左移动数字时。它乘以 10。
例如{3, 2}可以这样转换:
x = 0;
第一次迭代:
x = x * 10 + 3 // 3
第二次迭代:
x = x * 10 + 2 // 32