一种方法是使用ctype.h 或cctype
Functions to determine the type contained in character data
例如:它只接受 alphabetic 甚至 space
std::string ui; // user input
std::getline( std::cin, ui );
bool vi = true; // validate input
for( const char& chr : ui ){
if( !std::isalpha( chr ) ){
vi = false;
break;
}
}
if( vi ){
std::cout << "okay\n";
} else {
std::cout << "NOT!\n";
}
另一种是使用std::regex
Regular expressions library (C++11)
例如:同样
std::string ui; // user input
std::getline( std::cin, ui );
bool vi = true; // validate input
// for( const char& chr : ui ){
// if( !std::isalpha( chr ) ){
// vi = false;
// break;
// }
// }
vi = std::regex_match( ui, std::regex( "[A-Za-z]+" ) );
if( vi ){
std::cout << "okay\n";
} else {
std::cout << "NOT!\n";
}
你可以根据这些功能找到你需要的或者使用regexes
isalnum
isalpha
islower
isupper
isdigit
isxdigit
iscntrl
isgraph
isspace
isblank
isprint
ispunct
第三种方式可以使用std::string::find
例如:
std::string ui; // user input
std::getline( std::cin, ui );
bool vi = true; // validate input
// find
// rfind
// find_first_of
// find_first_not_of
// find_last_of
// find_last_not_of
const char* not_valid_input = "!@#$%^&*()_+,.";
while( *not_valid_input ){
if( ui.find( *not_valid_input ) < ui.size() ){
vi = false;
break;
}
++not_valid_input;
}
if( vi ){
std::cout << "okay\n";
} else {
std::cout << "NOT!\n";
}
还有第四种方法是使用std::find_if,但否定版本
std::string ui; // user input
std::getline( std::cin, ui );
bool vi = true; // validate input
vi = std::find_if_not( ui.begin(), ui.end(), ::isalpha ) == ui.end();
if( vi ){
std::cout << "okay\n";
} else {
std::cout << "NOT!\n";
}
注意:EX: 中的c++11 for-loop 等同于:
for( unsigned index = 0; index < ui.size(); ++index ){
if( !std::isalpha( ui[ index ] ) ){
vi = false;
break;
}
}