验证字符小于字母C ++中指定的字母

时间:2019-04-22 09:31:38

标签: c++

我正在做一个验证用户输入的函数,该函数是A0和J9之间的网格引用(10 x 10网格)。 我可以很好地验证整数部分,但是想知道如何验证字母部分,而不必说例如: if(列=='A'||列=='a'||列=='B'....) 类似于int Row <10。 另外,是否有一种方法可以转换为单个字符,例如将字符串转换为整数的stoi? 这是我的函数代码,谢谢。


void InputLocation(){
    bool still_prompt = true;
    while (still_prompt)
    {
        std::string answer;
        std::cout << "Enter a grid location from A0 to J9" << std::endl;
        std::getline(std::cin, answer);
        std::string Column = answer.substr(0, 1);
        std::string Row = answer.substr(1, 1);
        if (answer.length() > 2 || answer.length() < 2){
            std::cerr << "Location input must be of length 2 characters.\n";
            continue;
        }
        else{    // If input has length 2, then get to this stage
            try{
                int intRow = std::stoi(Row);
                if (intRow < 0 || intRow > 9){
                    std::cerr << "Row number must be between 0 and 9. \n";
                    continue;
                }
            }
            catch (...){
                std::cerr << "Second character of location input must be integer. \n";
                continue;
            }
        }still_prompt = false;
    }
}

1 个答案:

答案 0 :(得分:0)

单个字符可以视为数字,因此这非常简单!例如:

bool test(char character) {
    return 'a' <= character && character <= 'j'; 
}

此函数测试字符是否在'a'和'j'之间。之所以可行,是因为在内部,“ a”和“ j”只是数字。您甚至可以通过打印出值来查看它们是什么数字:

int a_value = 'a'; // chars can be implictly converted to int
int j_value = 'j';

std::cout << "value of 'a'": << a_value << '\n';
std::cout << "value of j'j": << j_value << '\n';

将它们放在一起。我们可以通过比较来检查某物是否在正确的范围内。以下功能将检查字符是否在aj范围内。

bool testInRange(char c) {
    return ('a' <= c && c <= 'j') || ('A' <= c && c <= 'J'); 
}

我们还可以编写一个函数将其转换为网格上的索引:

int charToGridIndex(char c) {
    if('A' <= c && c <= 'J') 
    {
        return c - 'A'; 
    } 
    else if('a' <= c && c <= 'j') 
    {
        return c - 'a'; 
    }
    else 
    {
        // Return -1 to indicate an invalid character
        return -1; 
    }
}

在这里

charToGridIndex('a') == 0
charToGridIndex('b') == 1
charToGridIndex('c') == 2
charToGridIndex('d') == 3
charToGridIndex('e') == 4
charToGridIndex('f') == 5
charToGridIndex('g') == 6
charToGridIndex('h') == 7 
charToGridIndex('i') == 8
charToGridIndex('j') == 9