【发布时间】:2016-01-16 22:28:17
【问题描述】:
我正在尝试继续循环以要求用户输入新密码,直到满足条件。将此新密码与传递给此函数的旧密码进行比较。条件是新旧密码的前半部分不能相同,新旧密码的后半部分不能相同。如果满足此条件,则将旧密码更改为新密码。到目前为止我有这个,但它只工作一次,并且在满足条件之前它不会一直循环询问新密码。有没有办法让它一直循环,直到新密码通过条件?
bool changePasswordintonewPW(string& oldpassword)
{
string newPW;
int sizeN;
int half;
int lengtholdPW;
int lengthnewPW;
do
{
cout << "Enter a new password that must meet condition: ";
getline(cin, newPW);
lengthnewPW = newPW.length();
lengtholdPW = oldpassword.length();
if (lengthnewPW < lengtholdPW)
{
sizeN = lengthnewPW;
}
else if (lengtholdPW < lengthnewPW)
{
sizeN = lengtholdPW;
}
else
sizeN = lengtholdPW;
half = sizeN / 2;
if( ( oldpassword.size() <= 2 ) ||
( ( oldpassword.substr( 0, half ) != newPW.substr( 0, half ) ) &&
( oldpassword.substr( oldpassword.size() - half ) != newPW.substr( newPW.size() - half ) ) ) )
return true;
{
cout << "The new password cannot start or end with " << half
<< " or more characters that are the same as the old password" << endl << endl;
}
} while (( oldpassword.size() <= 2 ) ||
( ( oldpassword.substr( 0, half ) != newPW.substr( 0, half ) ) &&
( oldpassword.substr( oldpassword.size() - half ) != newPW.substr( newPW.size() - half ) ) ) );
oldpassword = newPW;
return true;
}
【问题讨论】:
-
如果前半部分一样,后半部分一样,那不就意味着整个东西都是一样的吗?
-
将
&&更改为||。!(A and B) <=> !A or !B
标签: c++ function loops pass-by-reference do-while