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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.88
JaySeven
1 / 1 / 0
Регистрация: 24.05.2013
Сообщений: 41
#1

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

31.10.2013, 22:20. Просмотров 2554. Ответов 9
Метки нет (Все метки)

Напишите программу, которая читает клавиатурный ввод до символа @ и
повторяет его, за исключением десятичных цифр, преобразуя каждую букву верхнего
регистра в букву нижнего регистра и наоборот.
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;
     }
Выходит ошибка, вывод просто выводит символы не изменяя регистр
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.10.2013, 22:20     Верхний и нижний регистр
Посмотрите здесь:

Верхний и нижний регистр буквы - C++
#include &lt;cctype&gt; #include &lt;iostream&gt; int main() { using namespace std; char ch; while(cin.get(ch) &amp;&amp; ch !=...

Строки в С++. Верхний и нижний регистр - C++
char alphabet; int i; char letter; for(letter='A',i=0;letter&lt;='Z'; letter++,i++) alphabet=letter; alphabet=NULL;...

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

Кроссплатформенный перевод русских букв в верхний/нижний регистр - C++
Добрый день. В прикрепленном топике описываются способы вывода русских букв на консоль. Но они почти все подвязаны под винду. Более...

Перевод символов в верхний/нижний регистры - C++
Ребят. Подскажите как прописать функцию. Для перевода букв a. toLower – перевод буквы в нижний регистр b. toUpper – перевод буквы...

Нижний регистр - C++
Помогите пожалуйста с заданием. Как правильно написать. А то мучалась, так ни чего не смогла сделать. Задание: Написать программу,...

Перевод в нижний регистр - C++
Есть строка стринг в которой записана кириллица, нужно перевести ее в нижний регистр.

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
Модератор
6550 / 5016 / 463
Регистрация: 14.02.2011
Сообщений: 16,728
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
Кактус
66 / 66 / 6
Регистрация: 23.05.2012
Сообщений: 343
31.10.2013, 23:01     Верхний и нижний регистр #4
Цитата Сообщение от ValeryS Посмотреть сообщение
большие и малые буквы в английском алфавите отличаются 6 битом(0x20)
Ух ты, найс, найс. Хорошая информация. Спасибо.
MrGluck
Модератор
Эксперт CЭксперт С++
7158 / 4324 / 630
Регистрация: 29.11.2010
Сообщений: 11,746
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
Модератор
6550 / 5016 / 463
Регистрация: 14.02.2011
Сообщений: 16,728
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, но тогда вместо цифры будет пробел.
ValeryS
Модератор
6550 / 5016 / 463
Регистрация: 14.02.2011
Сообщений: 16,728
28.02.2015, 22:54     Верхний и нижний регистр #9
Цитата Сообщение от Tanko_Dav Посмотреть сообщение
Это делается для того что бы десятичные цифры просто удалялись
куда удалялись?
введена цифра 1 код 0х31 после
Цитата Сообщение от Tanko_Dav Посмотреть сообщение
simvol--;
получаем код 0х30 цифра 0
причем на экран она нигде не выводится
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.03.2017, 15:52     Верхний и нижний регистр
Еще ссылки по теме:

Строку в нижний регистр - C++
вводится русская строка (слово ) кодировка 1251, необходимо привести ее к нижнему регистру #include &lt;ctype.h&gt; #include &lt;locale.h&gt; ...

Перевод в нижний регистр - C++
Приветствую . Прошу помощи , выдаёт ошибку при переводе в нижний регистр , в чём проблема ? #include &lt;vector&gt; #include &lt;fstream&gt; ...

Преобразование в нижний регистр - C++
Здравствуйте! Почему это не работает (результат неизменен): #include &lt;Windows.h&gt; #include &lt;stdio.h&gt; void...

В верхний регистр - C++
Привет всем. Подскажите как можно сделать чтобы при передаче в функцию строки ( word ) она изменяла первую букву каждого слова на...

Перевод символа в нижний регистр - C++
Привет всем)) у меня такой вопрос: почему функция tolower() возвращает не символ в нижнем регистре, а какие-то цифры (наверное код буквы)....


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

Или воспользуйтесь поиском по форуму:
Invictus208
0 / 0 / 0
Регистрация: 16.03.2017
Сообщений: 7
21.03.2017, 15:52     Верхний и нижний регистр #10
Работающий код
#include <iostream>
#include <cctype>
#include <cstring>
#include <string>


int main()
{
using namespace std;

cout<<"Enter the text for analysis, to end enter @: ";
string str1;
string str2;
getline(cin,str1);
int len=str1.size();
for (int i=0;i<len && str1[i]!='@';i++)
{
if (isalpha(str1[i]) )
{
if (isupper(str1[i]))
str1[i]=tolower(str1[i]);
else if(islower(str1[i]))
str1[i]=toupper(str1[i]);
str2+=str1[i];
}
}
cout<<str2<<endl;
return 0;
}
Yandex
Объявления
21.03.2017, 15:52     Верхний и нижний регистр
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru