制作一个布尔值试图打印出大写字母

Making a Boolean trying to print out uppercase letters

objective 是为了让所有大写字母都打印成一个字符串,但是,我必须保留 bool 函数并在我的代码中使用它。我已经解决了过去的一些问题,但是 运行 遇到了一个阻止我修复它的问题。测试用例是 "HEllO" -> "HEO" "my" -> "" "NAME" -> "NAME" "Is" -> "I" "AnDeRsON" -> "ADRON".

#include <iostream>
using namespace std;

  bool isUpperCase(char ch){
    if(ch >= 'A' and ch <= 'Z'){
      return true;
        }
        return false;
        }

int main() {

  string a = "";
  cin >> a;
  string c = "";
  
  for(int i = 0; i < a.length(); i++)
    {
      if (isUpperCase(a[i])) i++;
        {
          c += a[i];
        }

    }
  cout << c << endl;
}

现在每当我做一个像“CHADnigeria”这样的案例时,它都会把它变成“HDnigeria”,即使我想让它说“CHAD”。它还删除了我不想要的大写字母,它应该删除小写字母。 “DancingInTheSky”变成了“ancingnheky”,应该是“DITS”。提醒一下,bool 函数不能更改。

我更新了您的程序,使其可以运行:

#include <iostream>
using namespace std;

bool isUpperCase(char ch){
    if(ch >= 'A' and ch <= 'Z'){
            return true;
    }
    return false;
}

int main() {

    string a = "";
    cin >> a;
    string c = "";

    for(int i = 0; i < a.length(); i++)
    {       
            if (isUpperCase(a[i]))
            {
                    c += a[i];
            }

    }
    cout << c << endl;
}

你犯了什么错误:你把 i++ 放在 if 语句之后,这导致了奇怪的输出。

希望能帮上一点忙

return condition;而不是if (condition) return true; else return false;是一个很好的编程习惯。我会将您的 isUpperCase 函数编写为:

bool isUpperCase(char ch) {
    return (ch >= 'A' and ch <= 'Z');
}

你要查找的错误在主函数中,有一个 i++ 引起了麻烦。您写道:

if (isUpperCase(a[i])) i++;
    {
      c += a[i];
    }

编译器将其理解为:

if (isUpperCase(a[i])) {
    i++;
}
c += a[i];

此外,当您在 C++ 中将单个字符添加到字符串中时,我建议您使用 push_back() 方法而不是 + 运算符。所以 c += a[i]; 将是 c.push_back(a[i]);。两者都可以正常工作,但 push_back() 通常效率更高。