C ++检查如果十六进制由ABCDEF1或0组成

时间:2018-05-02 08:33:38

标签: c++ hex

我编写了一个程序,将字符串转换为int,然后将十进制数转换为十六进制。我正在努力检查十六进制是否只包含这些字符A,B,C,D,E,F,1,0。如果是这样,将标志设置为true或false。

#include<iostream>
#include <stdlib.h>
#include <string>
#include <sstream>


string solution(string &S){

    int n = stoi(S);
    int answer;

    cout << "stoi(\"" << S << "\") is "
            << n << '\n';

    //decToHexa(myint);
    // char array to store hexadecimal number
    string hexaDeciNum[100];

    // counter for hexadecimal number array
    int i = 0;
    while(n!=0)
    {
        // temporary variable to store remainder
        int temp  = 0;

        // storing remainder in temp variable.
        temp = n % 16;

        // check if temp < 10
        if(temp < 10)
        {
            hexaDeciNum[i] = temp + 48;
            i++;
        }
        else
        {
            hexaDeciNum[i] = temp + 55;
            i++;
        }

        n = n/16;
    }

    // printing hexadecimal number array in reverse order
    for(int j=i-1; j>=0; j--){
        cout << hexaDeciNum[j] << "\n";


    return "";
}

int main(){

string word = "300";

cout << solution(word);

return 0;

}

1 个答案:

答案 0 :(得分:1)

好的,这不是完全回答你所要求的,但它是整个转换问题的一个有价值的替代方法

RowNumber(Nothing)

现在您不必进行差异化...您甚至可以使用此方法进行逆转换:

char letter(unsigned int digit)
{
    return "0123456789abcdefg"[digit];
    // alternatively upper case letters, if you prefer...
}

另一个优点:即使在这些奇怪的字符集上也可以使用,其中数字和字母不一定被分组到范围内(例如EBCDIC)。