Форум программистов, компьютерный форум CyberForum.ru

Верхний и нижний регистр - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.88
JaySeven
1 / 1 / 0
Регистрация: 24.05.2013
Сообщений: 41
31.10.2013, 22:20     Верхний и нижний регистр #1
Напишите программу, которая читает клавиатурный ввод до символа @ и
повторяет его, за исключением десятичных цифр, преобразуя каждую букву верхнего
регистра в букву нижнего регистра и наоборот.
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <cctype>
using namespace std;
 
int main()
{
    char ch;
    char str[80];
    int count = 0;
    cout << "Ââåäèòå ïðåäëîæåГ*ГЁГҐ äî ñèìâîëГ* \"@\" ";
    while ((ch = cin.get()) != '@') {
          if ( ('a' <= ch) && (ch >= 'z') )
             str[count] = toupper(ch);
          if ( ('A' <= ch) && (ch >= 'Z') )
             str[count] = tolower(ch);
          cout << ch;
          ++count;
}
     
     return 0;
     }
Выходит ошибка, вывод просто выводит символы не изменяя регистр
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
eocron
Кактус
 Аватар для eocron
66 / 66 / 6
Регистрация: 23.05.2012
Сообщений: 343
31.10.2013, 22:39     Верхний и нижний регистр #2
У вас условия неверные, потому не в один If программа не заходила - ch >= 'z'|'Z' - символ должен быть порядком выше, за пределами алфавита.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
using namespace std;
 
int main()
{
    char ch;
    while ((ch = cin.get()) != '@') 
    {
        if ( ch >= 'a' && ch <= 'z')
        {
            cout<<(char)(ch - 'a' + 'A');
        }
        else if ( ch >= 'A' && ch <= 'Z')
        {
            cout<<(char)(ch - 'A' + 'a');
        }
        else
        {
            cout << ch;
        }
    }
    cout<<'\n';
    system("pause");
    return 0;
}
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,056
31.10.2013, 22:56     Верхний и нижний регистр #3
Цитата Сообщение от JaySeven Посмотреть сообщение
C++
1
2
3
4
if ( ('a' <= ch) && (ch >= 'z') )
    str[count] = toupper(ch);
if ( ('A' <= ch) && (ch >= 'Z') )
str[count] = tolower(ch);
все это заменяется одной строчкой точнее двумя
C++
1
2
if (( ('a' <= ch) && (ch <= 'z'))||( ('A' <= ch) && (ch <= 'Z')))
   ch=ch^0x20;
большие и малые буквы в английском алфавите отличаются 6 битом(0x20)
изменяя (инвертируя) его можно менять большие на малые и наоборот
Цитата Сообщение от JaySeven Посмотреть сообщение
Выходит ошибка,
какая?
Цитата Сообщение от JaySeven Посмотреть сообщение
вывод просто выводит символы не изменяя регистр
еще бы
Цитата Сообщение от JaySeven Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
while ((ch = cin.get()) != '@') {
 if ( ('a' <= ch) && (ch >= 'z') )
   str[count] = toupper(ch);
 if ( ('A' <= ch) && (ch >= 'Z') )
   str[count] = tolower(ch);
     cout << ch;
    ++count;
}
выводим ch а измененные значения записываем в какой то буфер str, который нигде после не используется
зачем он нужен?
eocron
Кактус
 Аватар для eocron
66 / 66 / 6
Регистрация: 23.05.2012
Сообщений: 343
31.10.2013, 23:01     Верхний и нижний регистр #4
Цитата Сообщение от ValeryS Посмотреть сообщение
большие и малые буквы в английском алфавите отличаются 6 битом(0x20)
Ух ты, найс, найс. Хорошая информация. Спасибо.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4925 / 2668 / 243
Регистрация: 29.11.2010
Сообщений: 7,425
31.10.2013, 23:14     Верхний и нижний регистр #5
Цитата Сообщение от ValeryS Посмотреть сообщение
все это заменяется одной строчкой точнее двумя
а это в свою очередь простой
C++
1
2
if (isalpha(ch))
   ch=ch^0x20;
Итого:
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
#include <cctype>
 
int main()
{
    for (char ch; (ch = std::cin.get()) != '@'; std::cout << ch)
        if (isalpha(ch))
            ch ^= 0x20;
}
Tanko_Dav
0 / 0 / 0
Регистрация: 16.02.2015
Сообщений: 9
28.02.2015, 13:05     Верхний и нижний регистр #6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<iostream>
#include<cctype>
 
int main(){
    using namespace std;
char simvol;
cout<<" Vvedite stroku :"<<endl;
cin.get(simvol);
while(simvol!='@')
{
    if (isdigit(simvol)) //если введена десятичная цифра
    simvol--;                  //отступаем на 1 символ назад
    else if(islower(simvol))   //если символ нижнего регистра
    cout<<char(toupper(simvol));//перевести символ в верхний регистр.
    else
    cout<<char(tolower(simvol));//перевести символ в нижний регистр
    cin.get(simvol); //если этой строчки не будет, цикл будет бесконечен.
}              
 
    system("pause>>null");
     return 0; }
Добавлено через 14 минут
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,056
28.02.2015, 21:28     Верхний и нижний регистр #7
Цитата Сообщение от Tanko_Dav Посмотреть сообщение
else if(islower(simvol))
что будет если пользователь введет пробел или другой восклицательный знак?
Цитата Сообщение от Tanko_Dav Посмотреть сообщение
simvol--; * * * * * * * * *//отступаем на 1 символ назад
переведи
Tanko_Dav
0 / 0 / 0
Регистрация: 16.02.2015
Сообщений: 9
28.02.2015, 22:37     Верхний и нижний регистр #8
Это делается для того что бы десятичные цифры просто удалялись и не оставляли за собой след. Если введена десятичная цифра, то ее можно просто обнулить например вместо simvol-- написать simvol=0, но тогда вместо цифры будет пробел.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.02.2015, 22:54     Верхний и нижний регистр
Еще ссылки по теме:

Кроссплатформенный перевод русских букв в верхний/нижний регистр C++
C++ Перевод в нижний регистр
C++ Перевод символов в верхний/нижний регистры

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,056
28.02.2015, 22:54     Верхний и нижний регистр #9
Цитата Сообщение от Tanko_Dav Посмотреть сообщение
Это делается для того что бы десятичные цифры просто удалялись
куда удалялись?
введена цифра 1 код 0х31 после
Цитата Сообщение от Tanko_Dav Посмотреть сообщение
simvol--;
получаем код 0х30 цифра 0
причем на экран она нигде не выводится
Yandex
Объявления
28.02.2015, 22:54     Верхний и нижний регистр
Ответ Создать тему
Опции темы

Текущее время: 13:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru