C++ 仅将输入限制为字母表[a-z、a-z、空格、句点]
我试图将用户输入限制为仅限于某些字符[a-z,a-z,空格,句点],我无法正确使用此函数C++ 仅将输入限制为字母表[a-z、a-z、空格、句点],c++,C++,我试图将用户输入限制为仅限于某些字符[a-z,a-z,空格,句点],我无法正确使用此函数 void setName() { char fname[20]; unsigned int ascii_val; while(ascii_val<65 || ascii_val>90) { cout << "First Name: "; cin.ignore().getline(fname,20);
void setName()
{
char fname[20];
unsigned int ascii_val;
while(ascii_val<65 || ascii_val>90)
{
cout << "First Name: ";
cin.ignore().getline(fname,20);
for(int i=0; i<sizeof(fname); i++)
{
ascii_val = toupper(fname[i]);
if(ascii_val==32 || ascii_val==46 || ascii_val==0) //Exception to allow SPACE and PERIOD
{
ascii_val=65;
};
if(ascii_val<65 || ascii_val>90)
{
cout << "Only Alphabet [a-z,A-Z,SPACE,DOT] Allowed!\n";
break;
}
}
}
newfname = fname;
}
void setName()
{
char-fname[20];
无符号整数ascii值;
while(ascii_val90)
{
这终于奏效了!如果你认为这不是最好的解决方案,请发布你的备选方案
bool charVerify(string word)
{
for (int i = 0; i < word.size(); i++)
{
int character = toupper(word[i]);
if(character == ' ' || character == '.')
{
character='A';
}
if (character < 'A' || character > 'Z')
{
return false;
}
}
return true;
}
void setFname()
{
string fname;
cout << "Enter Name: ";
getline(std::cin.ignore(),fname);
while(1)
{
if (charVerify(fname))
{
break;
}
else
{
cout << "\tInvalid Input! Only [a-z,A-Z,SPACE,PERIOD]" << endl;
}
cin.clear();
cout << "Enter Name: ";
getline(std::cin.ignore(),fname);
}
firstname = fname;
}
bool charVerify(字符串字)
{
for(int i=0;i'Z')
{
返回false;
}
}
返回true;
}
void setFname()
{
字符串fname;
在继续之前,请先用'A'
和'Z'
替换65
和90
之类的内容。关于忽略
的注意事项不要将它们扔掉,以防需要忽略某些内容。如果确实需要忽略
,请将其放在留下不需要字符的IO事务之后在流中。如果您将忽略
放在其他事务之前,那么您迟早会在流中没有任何垃圾的情况下到达该事务,并体验“Dude,我的字符在哪里
?”第一手资料。如果你认为任何人的名字,不管是第一个还是其他,都不会超过20个字符,那你就要倒霉了。使用std::string
而不是原始char
数组。可能对你有用。警告:infor(int i=0;i