将String转换为全部大写 - C++

jor*_*ets 1 c++ sorting string

我无法按字母顺序将字符串转换为大写字母.在第三组单词后,我的程序实际上开始减速并冻结.我究竟做错了什么?

string iName = list[i]->GetLastName(); // This just returns a string of a name
string jName = list[j]->GetLastName();

for(unsigned int k = 0; k < iName.length(); k++)
  {
    iName[k] = toupper(iName[k]);
  }

for(unsigned int l = 0; l < jName.length(); l++)
  {
    iName[l] = toupper(jName[l]);
  }
Run Code Online (Sandbox Code Playgroud)

Hau*_*eth 12

使用STL algorithm库:

std::for_each(iName.begin(), iName.end(), std::toupper);
Run Code Online (Sandbox Code Playgroud)

或(由@Kerrek SB建议)

std::transform(s.begin(), s.end(), s.begin(), std::toupper);
Run Code Online (Sandbox Code Playgroud)

  • [转换](http://stackoverflow.com/questions/1489313/c-stdtransform-and-toupper-why-does-this-fail)甚至更好. (5认同)
  • 实际上,为什么你不能"变换"到范围本身?`std :: transform(s.begin(),s.end(),s.begin(),std :: toupper);`? (3认同)

Kei*_*las 7

正如其他人所说,你混合了iname和jname ....你为什么这样做?

因为你复制粘贴!

所以,编程的早期教训就是尽量避免复制粘贴!而是尝试创建功能.....

在你的情况下......

void stringToUpper(string &s)
{
   for(unsigned int l = 0; l < s.length(); l++)
  {
    s[l] = toupper(s[l]);
  }
}
Run Code Online (Sandbox Code Playgroud)

那么你可以做到

stringToUpper(iName);
stringToUpper(jName);
Run Code Online (Sandbox Code Playgroud)

这种方法减少了大量与复制粘贴相关的错误,并且通常有助于使您的程序更加模块化

  • 现在他将复制并粘贴你的功能.:)你是对的,这是一个很好的习惯. (2认同)