У меня есть кусок кода, который запрашивает пользовательский ввод, это тип «строка» и это действительно простой процесс, я хочу, чтобы любые пользовательские входы были преобразованы с помощью функции 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 должен быть «помогать» в любом случае
Вы назначаете строку для символа, когда на самом деле вы хотите назначить символ, сохраненный в позиции, в строчную версию.
Поэтому измени это:
sCommand = tolower(sCommand[i], loc);
к этому:
sCommand[i] = tolower(sCommand[i], loc);
// ^^^
Это еще один случай, когда Boost String Алгоритмы свел бы всю проблему к одному выражению:
boost::algorithm::to_lower(sCommand)
Попробуйте библиотеки Boost. Это очень поможет вам в долгосрочной перспективе и позволит вам сконцентрироваться на реальных проблемах, а не на глупостях, таких как миллионный программист для написания собственной функции преобразования строки в нижний регистр.