【问题标题】:Searching for "$" returns an error in C++ [duplicate]在 C++ 中搜索“$”会返回错误 [重复]
【发布时间】:2018-05-30 20:21:23
【问题描述】:

我想查看用户输入的密码是有效还是无效。对于这种情况,有效密码是至少包含一个大写字母、一个小写字母、一个数字和一个美元符号 ($) 的密码。当我搜索美元符号时,编译器会抛出错误:

ISO C++ 禁止指针和整数的比较

这就是我搜索美元符号的方式:

for(int i = 0; i < x.length(); i++) {
  if(x[i] == "$") {
    dlr = 1;
  }
}

这是完整的程序:

#include <iostream>
#include <string.h>

using namespace std;

int main () {
  string x("");
  cin >> x;
  bool upr = 0;
  bool lwr = 0;
  bool dlr = 0;
  bool num = 0;
  for(int i = 0; i < x.length(); i++) {
    if(isupper(x[i])) {
      upr = 1;
    }

    if(islower(x[i])) {
      lwr = 1;
    }

    if(x[i] == "$") {
      dlr = 1;
    }

    if(isdigit(x[i])) {
      num = 1;
    }
  }
  if(upr == lwr == dlr == num == 1) {
    cout << "The password is valid";
  } else {
    cout << "The password is invalid";
  }
  cout << dlr;
  return 0;
}

【问题讨论】:

  • 提示:"$"'$' 是两个截然不同的东西。
  • '$' 单引号不是双引号
  • 那些密码要求太糟糕了,所以希望你能解决这个问题,除非这是一个纯粹的学术练习。
  • 有一个单独的问题:“upr == lwr == dlr == num == 1` 没有做任何明智的事情。
  • @tadman 是的,这只是一个练习。

标签: c++ string search


【解决方案1】:

"$" 是一个C 字符串,因为它使用双引号,所以它类似于const char*。你想要的是一个角色:

if(x[i] == '$') {
  // ...
}

其中'$' 使用单引号并且是一个字符,或者char 是一个整数值。这里的"integer" 不要与特定的int 类型混淆。

【讨论】:

  • @NeilButterworth 是的,编译器可以得到你正在做的事情。
  • @NeilButterworth 我的意思是与intlong 整数相反,其中“整数”和int 不应混淆。
  • @NeilButterworth 我知道你在说什么,但我的意思是当人们在 C++ 上下文中说“整数”时,它通常意味着int,而不是整数与数学术语中的实数.
  • @NeilButterworth 添加了一些说明。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-21
  • 1970-01-01
  • 1970-01-01
  • 2012-07-28
  • 1970-01-01
  • 2023-01-13
  • 1970-01-01
相关资源
最近更新 更多