C ++不会根据需要在向量中插入数字/数字

时间:2016-02-27 09:49:32

标签: c++ c++11 vector

我正在编写代码,我的程序需要将变量和常量与给定的等式分开。这是我提出的最初想法:

std::string eq = argv[1];               // eg: y=2x+5
std::vector <char> variables;
std::vector <int> constants;

for(int i = 0; i < eq.size(); i++) {
  if(isalpha(eq[i]) && eq[i] != 'c') {
  variables.push_back(eq[i]);
  }
}

for(int i = 0; i < eq.size(); i++) {
  if(isdigit(eq[i])) {
  constants.push_back(eq[i]);
  }
}

for(auto j: constants) {
  std::cout << j << std::endl;
}

一切都很好,直到方程中的常数被分开并存储在向量constants中。每当执行代码并检查向量constants的内容时,都会返回完全不同且不正确的值。这是一个例子:

等式:y = 2x + 5

必需的输出(来自向量constants)= 2,5

程序产生的输出= 50,53

知道我哪里错了吗?编译期间未报告任何错误。

1 个答案:

答案 0 :(得分:3)

在ASCII字符集中,字符'0''9'的数值为4857。将char转换为int会得到数值。例如,值为'4'的char将具有52的数值。这解释了你的价值观,如50,53或52&#34;。

要将数字转换为您期望的值('0'0,...... '9'9),请减去'0'。例如;

 char x = '5';
 int n = x;
 int v = x - '0';
 std::cout << "'" << v << "' has the numeric value " << n << '\n';

请注意,不同的(非ASCII)字符集将提供不同的数值。但是这种类型的转换适用于所有标准字符集。