#include <iostream> // to generate the hexadecimal representation of a number
#include<string>
using std::string;
int main()
{
const string hexdigits("0123456789ABCDEF"); //possible hexdigits
std::cout << "enter the series of numbers between 0 and 15"
<< "separated by space. Hit enter when finished: "
<< std::endl; //line to be printed on screen
string result; // it will hold hexadecimal representation of the number
string::size_type n; // undefined string variable will hold numbers
while (std::cin >> n) // input number with just spaces
{
if (n < hexdigits.size()) // compares n with hexdigits size
{
result += hexdigits[n]; // storing string output in result
}
}
std::cout << "your hex number is: " << result << std::endl; //output result
return 0;
}
输入后按ENTER键时,不会自动生成输出十六进制。输入后,我必须使用转义序列\ n才能进行输出。输入数字后,仅按ENTER就可以得到我的输出?
我尝试使用getline获取整行并退出,如下所示
while(std::getline(std::cin, n))
但是它给出了错误E0304
没有任何重载函数'std :: getline'的实例与参数列表匹配。”
答案 0 :(得分:0)
您需要为std::string
提供一个getline
参数。转换在几种方式上都不正确,但是有许多示例说明了如何将十六进制字符串转换为数字。例如:
#include <iostream>
#include <string>
#include "stdlib.h"
int main()
{
std::string line;
if (std::getline(std::cin, line))
{
unsigned int value = strtoul(line.c_str(), NULL, 16);
std::cout << "your hex number is: " << value << std::endl; //output result
}
return 0;
}
答案 1 :(得分:0)
您对类型和逻辑感到困惑。首先,while(std::getline(std::cin, n))
不起作用,因为n
不是字符串,getline仅适用于字符串。其次,即使getline使用数字,逻辑也不正确,因为您想输入单行,而使用getline的while循环将输入多行。
答案是使用getline一次输入单行,然后使用while循环转换单行中的每个数字。为此,您必须知道如何从字符串(而不是从控制台)读取数字。我想这是您缺少的部分。
这里有一些示例代码(未经测试)
#include <iostream>
#include <sstream>
#include <string>
int main()
{
const std::string hexdigits("0123456789ABCDEF"); //possible hexdigits
std::cout << "enter the series of numbers between 0 and 15"
<< "separated by space. Hit enter when finished: "
<< std::endl;
std::string line;
if (getline(std::cin, line)) // read a line
{
std::istringstream buf(line);
unsigned result = 0, n;
while (buf >> n) // read numbers from the line
{
if (n < hexdigits.size())
{
result += hexdigits[n];
}
}
std::cout << "your hex number is: " << result << std::endl;
}
return 0;
}
顺便说一句,BTW尽量避免注释显而易见的注释,像// compares n with hexdigits size
这样的注释不会为您的代码添加任何内容。