我正在编写代码,我的程序需要将变量和常量与给定的等式分开。这是我提出的最初想法:
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
知道我哪里错了吗?编译期间未报告任何错误。
答案 0 :(得分:3)
在ASCII字符集中,字符'0'
到'9'
的数值为48
到57
。将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)字符集将提供不同的数值。但是这种类型的转换适用于所有标准字符集。