функция верхнего регистра C ++ - PullRequest
0 голосов
/ 21 марта 2019

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

Вот фрагмент кода для функции в верхнем регистре.

string Upperword(string originalString){
    string localString;
    int len = originalString.length();

    for (int i = 0 ; i << len; i++)
        localString = toupper(originalString[i]);

    return localString;
}

Кто-нибудь знает, почему слово не выводится в верхнем регистре?

Ответы [ 3 ]

3 голосов
/ 21 марта 2019

Откладывая опечатку i << len, вы непрерывно переназначаете возвращаемую строку, символ за символом;чрезвычайно раздутый список функций, предоставляемых std::string, исключает любую диагностику компилятора.

Лучший способ -

#include <algorithm>
std::string Upperword(std::string originalString){
    std::string localString = std::move(originalString);
    std::transform(
        localString.begin(),
        localString.end(),
        localString.begin(), 
        [](unsigned char c){return std::toupper(c);}
    );
    return localString;
}
3 голосов
/ 21 марта 2019

Как уже отмечали другие:

 i << len

Неверно.Это выражение немного сдвинет меня влево.В конечном итоге создание неопределенного поведения.Я уверен, что вы имели в виду:

i < len

Эта строка вряд ли скомпилируется:

localString = toupper(originalString[i]);

Вы пытаетесь присвоить символ строке.Вы хотите добавить в строку.

Возможно, вы хотите что-то ближе к этому:

string Upperword(const string& originalString)
{
    string localString;
    int len = originalString.length();
    for (int i = 0 ; i < len; i++)
    {
        localString += toupper(originalString[i]);
    }
    return localString;
 }
0 голосов
/ 21 марта 2019
  1. Вы должны сначала установить размер вашей localString.Он генерируется пустым, и, следовательно, установка его элементов приведет к сбою.Это можно сделать, например, как localString.resize(originalString.length());, прежде чем что-либо делать.
  2. Условие должно быть i<len, желательно, чтобы оба типа len и i имели тип size_t
  3. Помните, что toupper зависит оттекущий язык, не забудьте установить где-нибудь.
...