我寫了一段代碼來驗證一個關鍵字,它驗證并確保這個詞有 5 個字母長,并且都是沒有數字的字母。但是,當我運行它時,代碼似乎完全停止作業并且沒有提示我下一個問題,我已經在沒有此代碼的情況下對其進行了測驗,而這部分代碼就是問題所在,因為沒有它它可以正常作業.
代碼:
cout<<name1<<", please enter the keyword (5 characters): "<<endl;
cin>>key;
for(int i = 0; i < keylength; i ){
if(isalpha(key[i]) == 1){
validnum = 1;
}
}
if(validnum == keylength && key.length() == keylength){
validated = true;
}
else{
validated = false;
}
uj5u.com熱心網友回復:
正如評論中提到的,不需要任何回圈來確定密鑰是否為 5 個字符并且全部為字母。
使用std::all_of將測驗所有字符是否都是字母:
#include <algorithm>
#include <string>
#include <cctype>
#include <iostream>
bool isValidData(const std::string& key)
{
return key.size() == 5 && std::all_of(key.begin(), key.end(), ::isalpha);
}
int main()
{
//Test data
std::string testKeys[] = {"1abcdef", "abcde", "abcdefghijkl", "a", "xyzab"};
for (size_t i = 0; i < std::size(testKeys); i)
{
// Output results
std::cout << testKeys[i] << " " << (isValidData(testKeys[i])?"OK":"BAD") << "\n";
}
}
輸出:
1abcdef BAD
abcde OK
abcdefghijkl BAD
a BAD
xyzab OK
此外,如果您查看您的代碼,如果不運行代碼,則不清楚代碼的目標是什么。將其與函式進行比較isValidData:如果您說出該函式中包含的內容,則它幾乎與您的描述一樣:
“密鑰大小必須為 5,并且所有字符必須為 alpha”。
uj5u.com熱心網友回復:
在 for 回圈之前,您需要檢查key.length()是否等于keyLength. 否則,當用戶輸入長度小于 的字串時,回圈可能會呼叫未定義的行為keyLength。
該函式isalpha也不必回傳 1。它可以回傳任何正值。
更改您的代碼,如下所示
validated = key.length() == keyLength;
if ( validated )
{
size_t i = 0;
while ( i < keyLength && isalpha( ( unsigned char )key[i] ) ) i;
validated = i == keyLength;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/454902.html
