Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

Верхний и нижний регистр буквы - 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++
Помогите пожалуйста с заданием. Как правильно написать. А то мучалась, так ни чего не смогла сделать. Задание: Написать программу,...

9
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;
}
1
ValeryS
Модератор
6794 / 5202 / 499
Регистрация: 14.02.2011
Сообщений: 17,452
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, который нигде после не используется
зачем он нужен?
3
eocron
Кактус
66 / 66 / 6
Регистрация: 23.05.2012
Сообщений: 343
31.10.2013, 23:01 #4
Цитата Сообщение от ValeryS Посмотреть сообщение
большие и малые буквы в английском алфавите отличаются 6 битом(0x20)
Ух ты, найс, найс. Хорошая информация. Спасибо.
0
MrGluck
Модератор
Эксперт CЭксперт С++
7527 / 4665 / 704
Регистрация: 29.11.2010
Сообщений: 12,741
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;
}
2
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 минут
0
ValeryS
Модератор
6794 / 5202 / 499
Регистрация: 14.02.2011
Сообщений: 17,452
28.02.2015, 21:28 #7
Цитата Сообщение от Tanko_Dav Посмотреть сообщение
else if(islower(simvol))
что будет если пользователь введет пробел или другой восклицательный знак?
Цитата Сообщение от Tanko_Dav Посмотреть сообщение
simvol--; * * * * * * * * *//отступаем на 1 символ назад
переведи
0
Tanko_Dav
0 / 0 / 0
Регистрация: 16.02.2015
Сообщений: 9
28.02.2015, 22:37 #8
Это делается для того что бы десятичные цифры просто удалялись и не оставляли за собой след. Если введена десятичная цифра, то ее можно просто обнулить например вместо simvol-- написать simvol=0, но тогда вместо цифры будет пробел.
0
ValeryS
Модератор
6794 / 5202 / 499
Регистрация: 14.02.2011
Сообщений: 17,452
28.02.2015, 22:54 #9
Цитата Сообщение от Tanko_Dav Посмотреть сообщение
Это делается для того что бы десятичные цифры просто удалялись
куда удалялись?
введена цифра 1 код 0х31 после
Цитата Сообщение от Tanko_Dav Посмотреть сообщение
simvol--;
получаем код 0х30 цифра 0
причем на экран она нигде не выводится
0
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;
}
0
21.03.2017, 15:52
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.03.2017, 15:52
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

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