微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C ++数组,表达式必须具有恒定值

如何解决C ++数组,表达式必须具有恒定值

好,所以我是编码的新手,正在尝试学习c ++。我正在编写一个程序来验证密码是否包含大写,小写和数字。我认为该解决方案将是一个简单的解决方案,但我终生无法解决

using namespace std;

    string password ="";
    cin >> password; 
  

我可以证实这一点。然后,我想将密码转换为字符数组,以便检查密码的每个字符。我从以下开始:

    char passwordHolder[password.length()];

但是我得到了错误

表达式必须具有恒定值

从其他论坛的反馈来看,我认为这与Visual Studio有关,因为编译器无法处理变量数组,尽管我并不真正了解这种情况的发生原因/方式或解决方法

另一篇文章建议使用new运算符,但我不完全了解如何以一种可行的方式将其实现到我的代码中。

感谢您的帮助。

解决方法

我终于明白了。感谢user4581301告诉我一个字符串已经是一个字符数组。这个提示给了我解决问题的思路。

我实际上设法完全摆脱了新数组,而是搜索字符串。

我可以完全摆脱它,而不是char passwordHolder[password.length()];

我最初的计划是使用以下命令搜索passwordHolder数组:

for (int i = 0; i < password.length(); i++){
  if (isupper(passwordHolder[i])){
    hasUpper= true;
  }
  if (islower(passwordHolder[i])){
    hasLower= true;
  }
  if (isdigit(passwordHolder[i])){
    hasDigit = true;
  }
}
if (hasLower == true && hasUpper == true && hasDigit == true)
        return 1;

但是看到我不再需要passwordHolder数组,我可以改为使用password作为数组并这样做:

for (int i = 0; i < password.length(); i++) {
        if (isupper(password[i]))
            hasUpper = true;
        else if (islower(password[i]))
            hasLower = true;
        else if (isdigit(password[i]))
            hasDigit = true;
    }
    if (hasLower == true && hasUpper == true && hasDigit == true)
        return 1;

谢谢那些发表评论的人。我已经在这个问题上停留了大约3个小时了。

如果您在执行此任务时也遇到问题,请在此处找到我的完整解决方案。可能仍然很sc,但它可以工作:

#include <iostream>
#include <string>
using namespace std;


string password = "";
string confirmPassword = "";

bool hasDigit = false;
bool hasUpper = false;
bool hasLower = false;

int x = 0;

int confirm(string password,bool hasUpper,bool hasLower,bool hasDigit)
{

    for (int i = 0; i < password.length(); i++) {

        if (isupper(password[i]))
            hasUpper = true;
        else if (islower(password[i]))
            hasLower = true;
        else if (isdigit(password[i]))
            hasDigit = true;
    }
    if (hasLower == true && hasUpper == true && hasDigit == true)
        return 1;
}

int main(string password,bool hasDigit) {

Start:

    cout << "please enter your password: ";
    cin >> password;
    cout << "please confirm your password: ";
    cin >> confirmPassword;

    while (password != confirmPassword || password.length() < 8) {

        cout << "Passwords do not match. Please enter your password again: ";
        cin >> password;
        cout << "Please confirm your password: ";
        cin >> confirmPassword;
    }
    
    x = confirm(password,hasUpper,hasLower,hasDigit);

    if (x == 1) {
        cout << "You have a good password";
    }
    else {
        cout << "You should have a password with 8 characters or more,a Capital letter,lowercase letter,and a number. Try again. \n";
        goto Start;
    }

}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。