【问题标题】:Making a Boolean trying to print out uppercase letters制作一个试图打印大写字母的布尔值
【发布时间】:2020-10-10 19:21:49
【问题描述】:

目标是使所有大写字母都打印在字符串中,但是,我必须保留 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”之类的案例时,即使我希望它说“CHAD”,它也会将其变成“HDnigeria”。它还删除了我不想要的大写字母,它应该删除小写字母。 “DancingInTheSky”变成了“ancingnheky”,应该是“DITS”。请注意,bool 函数不能更改。

【问题讨论】:

  • if (isUpperCase(a[i])) i++; 这里发生了什么?去掉i++吧?
  • ^^^^ 丢失该行的尾随 i++;,注意:其中包括分号。
  • 相关,顺便说一句,您也不需要临时字符串。只需使用迭代器枚举字符串a,如果当前字符为大写,则将其(字符)转储到std::cout
  • @WhozCraig 删除 i++ 已修复,非常感谢!
  • 很抱歉破坏了您的辛勤工作,但请看std::isupper。没有理由重新发明轮子。

标签: c++ boolean uppercase


【解决方案1】:

我更新了您的程序以使其正常运行:

#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 语句之后,这导致了奇怪的输出。

希望能帮到你

【讨论】:

  • 有人在 cmets 中修复了它,但我很感激,它肯定会在未来帮助某人:)
【解决方案2】:

编写return condition; 而不是if (condition) return true; else return false; 是一个很好的编程实践。我会把你的 isUpperCase 函数写成:

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

您要查找的错误在 main 函数中,有一个 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() 通常更有效。

【讨论】:

    猜你喜欢
    • 2011-01-02
    • 1970-01-01
    • 2017-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-24
    • 2013-03-03
    • 2013-07-02
    相关资源
    最近更新 更多