问题描述
目标是使所有大写字母都打印成字符串,但是,我必须保留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函数。
解决方法
我更新了您的程序,使其可以正常工作:
#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()
通常更有效。