Avatar ·

Как работать со строками в C++?

Всем привет! Начал изучать C++ и столкнулся с проблемой при работе со строками. Пытаюсь написать простую программу, которая считывает имя пользователя, а затем выводит приветствие с этим именем, преобразованным в верхний регистр. Но код работает не так, как я ожидаю.

Вот что я пробовал:

#include <iostream>
#include <string>
#include <cctype>

int main() {
    std::string name;
    std::cout << "Введите имя: ";
    std::cin >> name;
    
    for (char c : name) {
        c = std::toupper(c);
    }
    
    std::cout << "Привет, " << name << "!" << std::endl;
    return 0;
}

Проблема в том, что имя выводится в исходном регистре, хотя я ожидаю, что оно будет в верхнем регистре. Похоже, что цикл for each не изменяет исходную строку. Я также пробовал использовать std::getline вместо std::cin >>, но это не помогло.

Ожидаемый результат: если ввожу "john", то должно выводиться "Привет, JOHN!". Что я делаю не так? Как правильно преобразовать строку в верхний регистр? И вообще, какие есть лучшие практики для работы со строками в C++? Заранее спасибо за помощь!