如何将多个字符转换为十进制值?

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

  1. 将出现的所有 'a' 替换为 ' '
  2. std::istringstream.
  3. 拆分字符串
  4. 为每个元素调用 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