Конвертировать строку в верхний регистр - C ++ - PullRequest
1 голос
/ 29 ноября 2011

У меня проблемы с переводом строк в верхний регистр для сортировки по алфавиту. Моя программа на самом деле начинает тормозить и зависать после третьего набора слов. Что я делаю не так?

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]);
  }

Ответы [ 3 ]

12 голосов
/ 29 ноября 2011

Использовать библиотеку STL algorithm:

std::for_each(iName.begin(), iName.end(), std::toupper);

или (предложено @ Kerrek SB )

std::transform(s.begin(), s.end(), s.begin(), std::toupper);
7 голосов
/ 29 ноября 2011

как говорили другие, вы смешали iname и jname .... и почему вы это сделали?

Потому что вы скопировали вставленный!

Итак, хороший ранний урок программирования - попытаться избежать копирования! вместо этого попробуйте создать функции .....

в вашем случае ...

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

тогда можно сделать

stringToUpper(iName);
stringToUpper(jName);

Этот подход сокращает ОЧЕНЬ много ошибок, связанных с копированием, и в целом помогает сделать ваши программы намного более модульными

0 голосов
/ 29 ноября 2011

Стандарт предполагает, что вы не должны использовать оператор [] в строке для изменения ее содержимого. Строка задана как неизменный объект, и ваш код нарушает этот стандарт. Поэтому я думаю, что ответ заключается в том, что трудно сказать, что может происходить, потому что вы используете класс так, как он не был разработан. Это может быть испортить какой-то внутренний индекс или что-то еще. Мы не знаем, что может делать класс строки внутри.

Тем не менее, похоже, что это должно работать:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...