获取输入字符串,将其转换为十六进制值,然后将其十六进制存储为int

时间:2018-02-07 02:58:46

标签: c++

所以我试图创建一个向用户询问行星的程序,这个程序存储为字符串。我想使用switch语句来做出决定(如果它的地球做这个,如果它的火星做这个)。我知道switch语句只占用整数,因此我将字符串转换为十六进制值。我坚持的问题是如何将十六进制值保存为int。

我知道做一堆嵌套的if语句会更容易,但我发现它真的很丑陋而且很笨重。

这是我到目前为止所做的:

/*
 * Have user input their weight and a planet
 * then output how heavy they would be on that planet
 * if planet is wrong
 * output it
*/

#include <iostream>
#include <string>
#include <sstream>

using namespace std;

string returnanswer(string x) {
    string dat = x;
    int test;
    ostringstream os;

    for (int i = 0; i < dat.length(); i++)
        os << hex << uppercase << (int) dat[i];

    string hexdat = os.str();

    cout << "Text: " << dat << endl;;
    cout << "Hex: " << hexdat << endl;

    return hexdat;
}

int main() {
    int weight;
    string planet;

    cout << "Please enter your weight: " << endl;
    cin >> weight;
    cout << "Please enter Planet" << endl;
    cin >> planet;

    returnanswer(planet);
    return 0;
}

1 个答案:

答案 0 :(得分:0)

将字符串十六进制转换为int的一种方法(使用C++ convert hex string to signed integer的建议)将是:

unsigned int num;
stringstream ss;
ss << hex << hexdat;
ss >> num;

num现在包含hexdat的int值。

在旁注中,不应将行星名称转换为十六进制,然后转换为字符串,而应考虑使用unordered_map(正如其他人所建议的那样),例如映射用户的unordered_map<string, Enum>将行星名称输入到枚举值。 Enum行星看起来像这样:

enum Planet {mercury, venus, earth, mars, jupiter, saturn, uranus, neptune};