扫描字符串字符的ASCII值

时间:2014-11-21 20:46:15

标签: c++

我想检查字符串是否包含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循环。为什么会这样?

3 个答案:

答案 0 :(得分:3)

number_in[i] == '\0'似乎不正确。循环的条件是继续运行。

但是,使用std::isalnumstd::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。

相关问题