C++程序不适用于某些输入

Ggn*_*aik 2 c++ string

你好

我有这个任务只打印C++字符串中的字母.它适用于大多数输入,但当输入[和输入时,]它们也会被打印.

#include <iostream>
#include <string>

using namespace std;

int main()
{
        string input = "THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG]";

        for(int i=0;i<input.size();i++) 
        {
                if(input[i] >='A' && input[i] <= 'z')
                //if(isalpha(input[i]))
                        cout<<input[i];
        }
        cout<<endl;
        return 0;
}
Run Code Online (Sandbox Code Playgroud)

cod*_*ict 7

问题出在这里:

if(input[i] >='A' && input[i] <= 'z')
              ^^^                ^^^ 
Run Code Online (Sandbox Code Playgroud)

您使用的是大写'A'和小写'z'.

范围A-zA-Z+不同a-z.
的ASCII值Z就是90和的a97.

在他们之间有6个其他字符,你正在考虑作为字母表.

ASCII value   Character
------------------------
90            Z 
91            [ \ 
92            \  \
93            ]   \  your range A-z includes these.
94            ^   /
95            _  /
96            ` /
97            a
Run Code Online (Sandbox Code Playgroud)

要仅允许使用大写和小写字母,您应该使用:

if( (input[i] >='A' && input[i] <= 'Z') || (input[i] >='a' && input[i] <= 'z') )
Run Code Online (Sandbox Code Playgroud)

甚至更好地使用isalpa:

if(isalpha(input[i])) 
Run Code Online (Sandbox Code Playgroud)