如何在C ++中将字符串转换为整数?

时间:2012-04-22 18:45:53

标签: c++ string integer

到目前为止,这是我的代码:

 #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值。如何将其转换为小数?

4 个答案:

答案 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'就足够了。