Другие языки программирования и технологии

Заменить в строке все заглавные буквы в строчные и наоборот c++

нужно простой способ. с помощью for if 'a'-'A' без лишних кодов
#include <string>
#include <iostream>
using namespace std;
int main() {
cout << "string? ";
string s;
getline(cin, s);
for (auto &c : s) c += c >= 'a' && c <= 'z' ? 'A' - 'a' : c >= 'A' && c <= 'Z' ? 'a' - 'A' : 0;
cout << "resutl: " << s << endl;
}
Азер Гусейнов
Азер Гусейнов
67 144
Лучший ответ
1.Генерируешь таблицу замены, где по индексу, равного коду символа, хранится значение, на которое его следует заменить.
2.Для каждой буквы строки заменяешь ее на символ из таблицы.
3...
4.Profit!
Если хочется арифметически, то можно еще так:

c = tolower(c) - c + toupper(c);

Оно в <cctype>

Но лично я бы еще использовал дополнительно islower/isupper в if-ах, т. к. цель не повыпендриваться, а с минимальным использованием C++ написать максимально понятную программу. Можно даже сишный <ctype.h> подключить для этого, чтоб поменьше плюсов было.
Aleksandr Maldekov
Aleksandr Maldekov
19 662
Ну, если "с помощью for if 'a'-'A' ", то:

#include <string.h>

...

for (int a=0; a<strlen(my_string); a++)
{
if (my_string[a] == 'a') my_string[a] = 'A';
if (my_string[a] == 'b') my_string[a] = 'B';
// и тд. . .
}
Иван Дуб
Иван Дуб
4 820
if (ch >= 'a' && ch <= 'z')
ch +='A' - 'a';

else

ch -='A' - 'a';
Вилли Таллер
Вилли Таллер
2 238
Эдуард Бельченко Так с пробелами случится неприятность
либо по таблице символов смотри код маленькой и прибавляй число до кода к большой букве. Либо встроенные функции - lowercase uppercase или как то так
Наиль Валиуллин if ('a'=='A'+'32') или а ('a'=='A'+'32' 'z'=='Z'+'32')da?а что написать в блоке if ?

Похожие вопросы