你好
我有这个任务只打印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)
问题出在这里:
if(input[i] >='A' && input[i] <= 'z')
^^^ ^^^
Run Code Online (Sandbox Code Playgroud)
您使用的是大写'A'和小写'z'.
范围A-z与A-Z+不同a-z.
的ASCII值Z就是90和的a是97.
在他们之间有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)
| 归档时间: |
|
| 查看次数: |
250 次 |
| 最近记录: |