【问题标题】:How to input letters and numbers using the same variable? (C++)如何使用相同的变量输入字母和数字? (C++)
【发布时间】:2017-04-25 17:40:22
【问题描述】:

我需要一些关于我正在尝试制作的十六进制计算器的帮助。十六进制计算需要能够读取字母和数字。那么如何在仍然能够读取数字的同时读取字母并将数值分配给字母呢?我需要能够读取 0-9 的值并为字母 A-F 分配 10-15 的值。

【问题讨论】:

  • std::string,也许?
  • 您不需要特殊变量来存储 A-F 字符。请记住,所有字符在内部都表示为数字。
  • int x = 15;int x = 0xF有什么区别?

标签: c++ variables hex calculator


【解决方案1】:

好的,我已经使用这段代码一段时间了,它一直运行良好。谢谢大家。

#include <iostream>
#include <string>

using namespace std;
int main ()
{
int conv;

cout <<"Please enter appropriate command for conversion;" << endl;
cout <<"1. Hexadecimal to Denary." << endl;
cout <<"2. Denary to Hexadecimal." << endl;

cin >> conv;

if (conv == 1)
{
    int xvar;

    cout <<"Please enter the number in hexadecimal." << endl;

    std::cin >> std::hex >> xvar;

    std::cout << std::hex << xvar << endl;
    std::cout << std::dec << xvar << endl;
}

if (conv == 2)
{
    int yvar;

    cout <<"Please enter the number in denary." << endl;

    std::cin >> std::dec >> yvar;

    std::cout << std::dec << yvar << endl;
    std::cout << std::hex << yvar << endl;

}   
}

【讨论】:

    【解决方案2】:

    您可以使用std::hex 输入一个十六进制值。

    例如:

    int my_value;
    std::cin >> std::hex >> my_value;
    

    它也适用于std::cout:

    std::cout << std::hex << my_value;
    

    请注意,my_value 默认仍被视为十进制。

    来源: Getting hex through Cin


    或者你可以这样做:

    std::string input;
    std::cin >> input;
    int hex = 0;
    for(unsigned int i = 0; i < input.length; ++i)
    {
        int temp = 0;
        if(input[i] >= '0' && input[i] <= '9')
            temp = (input[i] - '0');
        else if(input[i] >= 'a' && input[i] <= 'f')
            temp = (input[i] - 'a');
        else if(input[i] >= 'A' && input[i] <= 'F')
            temp = (input[i] - 'A');
        temp += i * 16;
    
        hex =+ temp;
    }
    

    几点说明:

    • 这使用 ASCII char 算术。有点看不懂。
    • 这会将char 转换为int,可能会导致某些系统出现问题
    • 如果在左侧添加 0 会出现错误
    • 我没有运行这个。可能还有更多错误。

    【讨论】:

    • “请注意,my_value 将值存储为十进制。” 我对此表示怀疑。它将被存储为二进制表示。
    • 好的,非常感谢。我使用了以下代码,它似乎正在工作。 #include #include using namespace std; int main () { int xvar; cout > std::hex >> xvar; std::cout
    • 在这里我想我必须使用 if else 语句。顺便说一句,如果我不得不在其他地方使用类似的东西,我将如何使用相同的变量输入 char 和 int ?我理解十六进制应用程序,但在其他地方......
    【解决方案3】:

    你可以使用字符串

    string s = "cb10"
    

    关于如何使用,你可以直接

    s[0] = 'a' //s = "ab10"
    s[1] = '3' //s = "a310"
    int i = s[1] - '0' //change char to int, i = 3
    

    【讨论】:

    • A-F、a-f 的计算结果如何?
    • int i = s[0] - 'a' + 10
    • 对于 A-F,int i = s[0] - 'A' + 10
    • 好像一点都不聪明……因为应该先排序再计算。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-31
    • 2017-02-20
    • 2019-04-12
    • 1970-01-01
    相关资源
    最近更新 更多