输入完成后按回车键获取字符串输出

时间:2018-11-25 09:57:15

标签: c++ string visual-studio

#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'的实例与参数列表匹配。”

2 个答案:

答案 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这样的注释不会为您的代码添加任何内容。