我正在做一个验证用户输入的函数,该函数是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;
}
}
答案 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';
将它们放在一起。我们可以通过比较来检查某物是否在正确的范围内。以下功能将检查字符是否在a
至j
范围内。
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