我想检查字符串是否包含0-9或A-Z以外的任何字符,如果是,则停止程序。这就是我所做的:
string number_in;
for (int i = 0; number_in[i] == '\0'; i++)
{
if ( (number_in[i] < 48) || ( (number_in[i] > 57) && (number_in[i] < 65) ) || (number_in[i] > 90) )
{
cout << "\nInput number contains incorrect characters!\n";
getchar;
return 0;
}
}
但无论我输入哪个字符串,它总是会跳过for循环。为什么会这样?
答案 0 :(得分:3)
number_in[i] == '\0'
似乎不正确。循环的条件是继续运行。
但是,使用std::isalnum
和std::all_of
:
bool stopProgramm = !std::all_of( std::begin(str), std::end(str),
[] (unsigned char c)
{ return std::isdigit(c) || std::isupper(c); } );
答案 1 :(得分:1)
number_in[i] == '\0'
应为number_in[i] != '\0'
。当条件为真时,for循环运行。
答案 2 :(得分:0)
你应该这样做:
#include <cctype>
// ...
char const c = number_in[i];
if ( !(isascii(c) && (isdigit(c) || isupper(c))) ) {
// ...
}
严格来说,isascii(c)
并不是必需的,但是,如果您想要跨平台,那么is*()
不是c
的其他{{1}}函数会在Windows上中断。 t ASCII。