Как манипулировать строкой в ​​нижнем регистре и хранить в той же переменной

У меня есть кусок кода, который запрашивает пользовательский ввод, это тип «строка» и это действительно простой процесс, я хочу, чтобы любые пользовательские входы были преобразованы с помощью функции tolower (). Он делает именно то, что должен, но я не могу присвоить его той же переменной. Любая помощь, пожалуйста?

#include <locale>
#include <string>
#include <iostream>
//maybe some other headers, but headers aren't the problem, so I am not going to list them all

while (nCommand == 0)
{
locale loc;
string sCommand;
cin >> sCommand;

for (int i = 0; i < sCommand.length(); ++i)
{
sCommand = tolower(sCommand[i],loc);
cout << sCommand;
}

Например, если пользователь введет в справке sCommand, будет h

Как я хочу, чтобы это выглядело так, если пользователь вводит HELP, Help или HeLp

sCommand должен быть «помогать» в любом случае

0

Решение

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

Поэтому измени это:

sCommand = tolower(sCommand[i], loc);

к этому:

sCommand[i] = tolower(sCommand[i], loc);
//      ^^^
1

Другие решения

Это еще один случай, когда Boost String Алгоритмы свел бы всю проблему к одному выражению:

boost::algorithm::to_lower(sCommand)

Попробуйте библиотеки Boost. Это очень поможет вам в долгосрочной перспективе и позволит вам сконцентрироваться на реальных проблемах, а не на глупостях, таких как миллионный программист для написания собственной функции преобразования строки в нижний регистр.

1

По вопросам рекламы [email protected]