到目前为止,这是我的代码:
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
int main()
{
string exp;
cout << "Enter a number and raise it to a power" << endl;
cin >> exp;
int num = exp[0];
int pow = exp[2];
cin.get();
cin.ignore(256,'\n');
}
基本上,我正在尝试创建一个程序,您可以输入类似“2 ^ 5”的内容,它会为您解决。到目前为止,我已经取了字符串的第一个和第三个值,称它们为“num”和“pow”。 (数量,功率)如果您尝试类似“cout&lt;&lt; num;”的内容它会给你十进制的Ascii值。如何将其转换为小数?
答案 0 :(得分:6)
您可以直接从cin
读取整数变量:
int n;
std::cin >> n;
但你无法以这种方式进入看起来很自然的表达方式。
要阅读2^5
,您可以使用std::stringstream
:
int pos = exp.find('^');
int n;
std::stringstream ss;
if(pos != std::npos){
ss << exp.substr(0, pos);
ss >> n;
}
和第二个变量类似。
此方法在Boost中实现为boost::lexical_cast
。
更复杂的表达式需要构建解析器,我建议您阅读更多有关此主题的内容。
答案 1 :(得分:2)
strtol
非常擅长这一点。它读取尽可能多的数字,返回数字,并为您提供指向导致它停止的字符的指针(在您的情况下将是'^'
)。
答案 2 :(得分:1)
int num;
char op;
int pow;
if ((std::cin >> num >> op >> pow) && op == '^') {
// do anything with num and pow
}
答案 3 :(得分:0)
您的所有数字似乎都低于10,在这种情况下exp[0]-'0'
和exp[1]-'0'
就足够了。