2014-11-06 2 views
-1

Я знаком с использованием std :: transform (data.begin(), data.end(), data.begin(), :: toupper), который может изменить строку данных во всех прописных. Мне интересно, однако, если есть чистое решение, которое может получить версию в верхнем регистре строки без изменения источника? Обходное решение сделать копию источника, а затем вызвать std :: transform на копии, а затем вернуть копию, похоже, похоже на kludge, и мне интересно, есть ли более эффективное и элегантное решение.преобразование std :: string в верхний регистр без изменения источника

Я ищу чистое решение C++ 11 ... без зависимости от любых широко доступных библиотек C++, таких как boost.

+0

«сделать копию исходного кода и последующего вызов зОго :: преобразования на копию, а затем возвращая копию «так же эффективно, как и вы, если вы не меняете источник. – Jagannath

+0

Вы имеете в виду, что каким-то образом в момент компиляции строка будет заглавной, а в исходном тексте - строчный? – didierc

+2

'std :: string udata; std :: transform (data.begin(), data.end(), std :: back_inserter (udata), :: toupper); '. Ничто не говорит о том, что трансформация должна произойти на месте. –

ответ

1

комментарий Пера Игоря выше, решение заключается в использовании зОго :: back_inserter от назначения .... std::transform(src.begin(), src.end(), std::back_inserter(dest), ::toupper);