所以我试图创建一个向用户询问行星的程序,这个程序存储为字符串。我想使用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;
}
答案 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};