C/C++
Ввести с клавиатуры символ и преобразовать его в символ верхнего регистра. Как сделать без библиотеки string?
Ввести с клавиатуры символ и преобразовать его в символ верхнего регистра. Как сделать без библиотеки string?
#include <iostream>
using namespace std;
char tolower(char ch) {
static char len[] = "etaoinshrdlcumwfgypbvkxjqz";
static char uen[] = "ETAOINSHRDLCUMWFGYPBVKXJQZ";
static char lru[] = "оеаинтсрвлкмдпуяыьгзбчйхжшюцщэфъё";
static char uru[] = "ОЕАИНТСРВЛКМДПУЯЫЬГЗБЧЙХЖШЮЦЩЭФЪЁ";
for (int i = 0; i < 26; ++i) {
if (uen[i] == ch) return len[i];
if (uru[i] == ch) return lru[i];
}
for (int i = 26; i < 33; ++i) {
if (uru[i] == ch) return lru[i];
}
return ch;
}
char toupper(char ch) {
static char len[] = "etaoinshrdlcumwfgypbvkxjqz";
static char uen[] = "ETAOINSHRDLCUMWFGYPBVKXJQZ";
static char lru[] = "оеаинтсрвлкмдпуяыьгзбчйхжшюцщэфъё";
static char uru[] = "ОЕАИНТСРВЛКМДПУЯЫЬГЗБЧЙХЖШЮЦЩЭФЪЁ";
for (int i = 0; i < 26; ++i) {
if (len[i] == ch) return uen[i];
if (lru[i] == ch) return uru[i];
}
for (int i = 26; i < 33; ++i) {
if (lru[i] == ch) return uru[i];
}
return ch;
}
int main() {
system("chcp 1251 > nul");
while (true) {
cout << "Символ в нижнем регистре: ";
char ch = cin.get();
ch = toupper(ch);
cout << "Символ в верхнем регистре: " << ch << '\n';
cin.ignore(cin.rdbuf()->in_avail());
}
system("pause > nul");
}
using namespace std;
char tolower(char ch) {
static char len[] = "etaoinshrdlcumwfgypbvkxjqz";
static char uen[] = "ETAOINSHRDLCUMWFGYPBVKXJQZ";
static char lru[] = "оеаинтсрвлкмдпуяыьгзбчйхжшюцщэфъё";
static char uru[] = "ОЕАИНТСРВЛКМДПУЯЫЬГЗБЧЙХЖШЮЦЩЭФЪЁ";
for (int i = 0; i < 26; ++i) {
if (uen[i] == ch) return len[i];
if (uru[i] == ch) return lru[i];
}
for (int i = 26; i < 33; ++i) {
if (uru[i] == ch) return lru[i];
}
return ch;
}
char toupper(char ch) {
static char len[] = "etaoinshrdlcumwfgypbvkxjqz";
static char uen[] = "ETAOINSHRDLCUMWFGYPBVKXJQZ";
static char lru[] = "оеаинтсрвлкмдпуяыьгзбчйхжшюцщэфъё";
static char uru[] = "ОЕАИНТСРВЛКМДПУЯЫЬГЗБЧЙХЖШЮЦЩЭФЪЁ";
for (int i = 0; i < 26; ++i) {
if (len[i] == ch) return uen[i];
if (lru[i] == ch) return uru[i];
}
for (int i = 26; i < 33; ++i) {
if (lru[i] == ch) return uru[i];
}
return ch;
}
int main() {
system("chcp 1251 > nul");
while (true) {
cout << "Символ в нижнем регистре: ";
char ch = cin.get();
ch = toupper(ch);
cout << "Символ в верхнем регистре: " << ch << '\n';
cin.ignore(cin.rdbuf()->in_avail());
}
system("pause > nul");
}
Всё верно. За исключением того, что в Linux по умолчанию всё выводится в UTF-8. Соответственно русские (и многие другие) буковки будут занимать 2 char-а и с ними будет факап. Так что, самый реальный вариант - это ограничиться латинскими буквами.
Денис Байдосов
Проблема не такая простая, как кажется, т. к. блокнот будет сохранять исходники (и ресурсные файлы) тоже в UTF-8 и это нужно будет указать компилятору... и т. д. и т. п.
Антон Пашаев
хочется взять и бросить это программировании, я вижу эти студии разработки sdk или как их зовут.
Короче студии для написания кода, все готовое библиотеки всякие функции, остается писать только свой код.
А тут бац еще оказывается такие тонкости всякие, кодировка 2 байта что что то или 2 char.
Целая наука какая то.
Правда мне нравится это все один хрен.
Но я реально жалею что мне все понравилось.
Жалко проводить сутками на пролет за компом и проблемка еще в том что я оторваться от него не могу, если пишу программку какую то, думаю так каждый, а так может кто то избавился от такой привычки уже.
Короче студии для написания кода, все готовое библиотеки всякие функции, остается писать только свой код.
А тут бац еще оказывается такие тонкости всякие, кодировка 2 байта что что то или 2 char.
Целая наука какая то.
Правда мне нравится это все один хрен.
Но я реально жалею что мне все понравилось.
Жалко проводить сутками на пролет за компом и проблемка еще в том что я оторваться от него не могу, если пишу программку какую то, думаю так каждый, а так может кто то избавился от такой привычки уже.
Всё намного проще если простой С
char smb; char smb2;
while (smb!=(' '+32) )
{
printf("\nВведите символ "); scanf("%c", &smb);
scanf("%c", &smb2); //Удаляем символ ENTER
if ( (smb>='A' || smb<='Z') || (smb>='А' || smb<='Я') || (smb=='Ё') )
{
smb+=32;
putchar('\n');
putchar(smb);
}
else printf("Символ в нижнем регистре\n");
}
char smb; char smb2;
while (smb!=(' '+32) )
{
printf("\nВведите символ "); scanf("%c", &smb);
scanf("%c", &smb2); //Удаляем символ ENTER
if ( (smb>='A' || smb<='Z') || (smb>='А' || smb<='Я') || (smb=='Ё') )
{
smb+=32;
putchar('\n');
putchar(smb);
}
else printf("Символ в нижнем регистре\n");
}
Артем Мустаев
Да и на C++ код недалеко ушёл от этого. Принцип тот же, библиотеки свои.
Что с того, что без библиотеки string? Ведь методы get и peek не из класса string, а из класса istream; достаточно библиотеки iostream. А тип char вообще стандартный, независимо от библиотек.
Способы преобразования символа предложили другие. Лично мне более по нраву XOR-преобразование.
Способы преобразования символа предложили другие. Лично мне более по нраву XOR-преобразование.
Роман Проклов
а смысл такой сложности? проверять маской или что-то обнулять трудоёмко
// For english symbols:
Char character;
Cin > > character;
If(character >= 97 && character <= 122) character - 32;
Cout < < character;
Char character;
Cin > > character;
If(character >= 97 && character <= 122) character - 32;
Cout < < character;
Похожие вопросы
- Как в языке си ввести с клавиатуры сначала количество чисел последовательности, а потом саму последовательность
- Преобразовать заданное вещественное число в строку символов с указанием количества разрядов после разделителя целой c++
- Ассемблер. Зачем нужны связанные регистры?
- Как сделать проверку на число типо если кто то ввел не число то будет чтото выводить на экран c++
- Чем именно обрабатываются не регистровые переменные если регистровые обрабатываются регистрами?
- Создание функции std::size_t String::find(char ch)
- WINAPI C++ string в char
- В смысле С не поддерживает классы а как же библиотеки ?
- Для заданных с клавиатуры значений переменных x и n вычислить
- Как узнать количество символов в UTF8 массиве?(Си)
Тогда использовали бы <map> для перекодировки.
А вообще-то почему бы не отметить тот факт, что буквы верхнего регистра и буквы нижнего регистра следуют друг за другом в одинаковом порядке? Это справедливо для любой локали. Значит, достаточно вычислить разность между первой заглавной и первой строчной букв, к чему же большее?