根据字符串中大小写字符的数量将字符串转换为小写/大写



如果字符串中的大写字符数较多,我必须以全大写形式输出字符串,否则如果字符串中小写字符较多,将显示小写字符串,如果两个字符相等,我将仅以小写形式打印字符串这是我写的代码,但是,它没有给出所需的输出,就像它将相同的字符串返回给我一样,请帮助我处理错误

这是代码,我使用的是c++。

string s;
cin>>s;
int uc=0,lc=0;
for (int i = 0; i < s.size(); i++)
{       
if(isupper(s[i])){
uc++;
}
else{
lc++;
}
}
if(uc>lc){
for (int j = 0; j < s.size(); j++)
{
toupper(s[j]);
}    
cout<<s<<endl;
}
else{
for (int k = 0; k < s.size(); k++)
{
tolower(s[k]);
}
cout<<s<<endl;
}

您的问题是没有重新分配字符串的各个字符,导致输入字符串未被更改。

你需要做:

s[j] = toupper(s[j])
s[k] = tolower(s[k]);

另一种方法是在计数过程后将字符串作为一个整体进行转换-需要包括<algorithm>(该答案的学分(:

if (uc > lc) {
std::transform(s.begin(), s.end(), s.begin(), ::toupper);
}
else {
std::transform(s.begin(), s.end(), s.begin(), ::tolower);
}

第一次循环后,执行以下操作:

string result = (uc>lc) ? toupper(s) : tolower(s);

最新更新