Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.88
JaySeven
1 / 1 / 2
Регистрация: 24.05.2013
Сообщений: 41
#1

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

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

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

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

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

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

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

9
eocron
Кактус
66 / 66 / 19
Регистрация: 23.05.2012
Сообщений: 342
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
Модератор
7125 / 5393 / 669
Регистрация: 14.02.2011
Сообщений: 18,212
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 / 19
Регистрация: 23.05.2012
Сообщений: 342
31.10.2013, 23:01 #4
Цитата Сообщение от ValeryS Посмотреть сообщение
большие и малые буквы в английском алфавите отличаются 6 битом(0x20)
Ух ты, найс, найс. Хорошая информация. Спасибо.
0
MrGluck
Модератор
Эксперт CЭксперт С++
8021 / 4864 / 1425
Регистрация: 29.11.2010
Сообщений: 13,240
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 / 1
Регистрация: 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
Модератор
7125 / 5393 / 669
Регистрация: 14.02.2011
Сообщений: 18,212
28.02.2015, 21:28 #7
Цитата Сообщение от Tanko_Dav Посмотреть сообщение
else if(islower(simvol))
что будет если пользователь введет пробел или другой восклицательный знак?
Цитата Сообщение от Tanko_Dav Посмотреть сообщение
simvol--; * * * * * * * * *//отступаем на 1 символ назад
переведи
0
Tanko_Dav
0 / 0 / 1
Регистрация: 16.02.2015
Сообщений: 9
28.02.2015, 22:37 #8
Это делается для того что бы десятичные цифры просто удалялись и не оставляли за собой след. Если введена десятичная цифра, то ее можно просто обнулить например вместо simvol-- написать simvol=0, но тогда вместо цифры будет пробел.
0
ValeryS
Модератор
7125 / 5393 / 669
Регистрация: 14.02.2011
Сообщений: 18,212
28.02.2015, 22:54 #9
Цитата Сообщение от Tanko_Dav Посмотреть сообщение
Это делается для того что бы десятичные цифры просто удалялись
куда удалялись?
введена цифра 1 код 0х31 после
Цитата Сообщение от Tanko_Dav Посмотреть сообщение
simvol--;
получаем код 0х30 цифра 0
причем на экран она нигде не выводится
0
Invictus208
0 / 0 / 1
Регистрация: 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
Привет! Вот еще темы с решениями:

В верхний регистр
Привет всем. Подскажите как можно сделать чтобы при передаче в функцию строки ...

Преобразование в нижний регистр
Здравствуйте! Почему это не работает (результат неизменен): #include...

Строку в нижний регистр
вводится русская строка (слово ) кодировка 1251, необходимо привести ее к...

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


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

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

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