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

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

Войти
Регистрация
Восстановить пароль
 
CHELOVEKPAUK
13 / 3 / 2
Регистрация: 01.08.2013
Сообщений: 332
Записей в блоге: 1
#1

Программа перевода регистра символов - C++

28.08.2013, 19:39. Просмотров 797. Ответов 15
Метки нет (Все метки)

Задача: Написать программу с использованием предирективы cctype, которая читает клавиатурный ввод до символа @ и
повторяет его, за исключением десятичных цифр, преобразуя каждую букву верхнего регистра в букву нижнего регистра и наоборот.

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

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    char ch;
    cout << "Вводите текст: ";
    while (cin.get(ch) && ch != '@')
    {
        if (isdigit(ch) != 0)
            continue;
        else if (islower(ch) != 0)
        {
            ch = toupper(ch);
        }
        else if (isupper(ch) != 0)
        {
            ch = tolower(ch);
        }
    }
    cout << ch;
    system("pause");
}
Миниатюры
Программа перевода регистра символов  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.08.2013, 19:39     Программа перевода регистра символов
Посмотрите здесь:

Инвертирование регистра символов - C++
char str; cin.getline(str,n); for(int i=0;i&lt;strlen(str);i++){ if(islower(str)){ str=toupper(str); ...

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

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

Доработать код: изменение регистра символов, считанных из файла - C++
Добрый вечер уважаемые мастера! Вот решаю одну задаю ,уже написал такой код #include &lt;iostream&gt; #include &lt;fstream&gt; #include...

Программа для распознавания регистра - C++
Имеется программа для распознавания регистра символов. Она должна спросить пользователя ввести символ, потом оценить его и вывести...

Программа перевода - C++
Мне нужно сделать программу перевода целого числа в буквенную форму записи, например 124 = сто двадцать четыре. х є {0,1000000} Можете...

Программа перевода чисел - C++
Здравствуйте :) я новичок в с++ и сейчас пытаюсь написать программу для перевода восьмиразрядного двоичного числа в десятичное....

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Hugra
47 / 47 / 1
Регистрация: 18.07.2013
Сообщений: 138
Записей в блоге: 1
28.08.2013, 19:59     Программа перевода регистра символов #2
Скорей всего ты используешь русскую раскладку в программе. Хочу дать совет, пока изучаешь C++ по книжке, постарайся смерится с кодировкой и использовать только английскую раскладку. Ты можешь конечно искать костели, как это все обойти, но это совершенно отдельная тема, которой ты спокойно можешь заняться, изучив теорию C++.
Я пока смерился с проблемой кодировок, потому, что она только отвлекает от процесса изучения основ.

В будущем, сам напишешь модуль для новичков, что бы у них не возникало таких проблем =)
XRuZzz
Антикодер
649 / 550 / 27
Регистрация: 15.09.2012
Сообщений: 2,497
28.08.2013, 20:08     Программа перевода регистра символов #3
попробуйте перевести сообщение на скриншоте, или вы понимаете что пишет вам компилятор?

PS если прога компилируется на gcc то это проблема Visual C++(он слишком муторный для начинающих)
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
28.08.2013, 20:16     Программа перевода регистра символов #4
C++
1
else if (isupper(unsigned char(ch))!= 0)
И в других функциях cctype также сделать.
Arwing
Сообщений: n/a
28.08.2013, 20:17     Программа перевода регистра символов #5
Скиньте код целиком: от подключения библиотек до конца
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
28.08.2013, 20:26     Программа перевода регистра символов #6
Цитата Сообщение от CHELOVEKPAUK Посмотреть сообщение
все равно та же ошибка.
Это из-за знакового char и кодов символов больше 127 (например, коды русских символов).
CHELOVEKPAUK
13 / 3 / 2
Регистрация: 01.08.2013
Сообщений: 332
Записей в блоге: 1
28.08.2013, 20:36  [ТС]     Программа перевода регистра символов #7
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
26
27
28
29
30
31
32
33
34
[QUOTE=Arwing;4996082]Скиньте код целиком: от подключения библиотек до конца[/QUOTE]
 
#include <iostream>
#include <Windows.h>
#include <string>
#include <cctype>
 
using namespace std;
 
#define rus SetConsoleCP(1251);SetConsoleOutputCP(1251);
 
 
int main()
{
    char ch;
    cout << "Вводите текст: ";
    while (cin.get(ch) && ch != '@')
    {
        if (isdigit(ch) != 0)
            continue;
        else if (islower(ch) != 0)
        {
            ch = toupper(ch);
              cout << ch;
        }
        else if (isupper(ch) != 0)
        {
            ch = tolower(ch);
              cout << ch;
        }
    }
 
    system("pause");
}
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
28.08.2013, 20:42     Программа перевода регистра символов #8
CHELOVEKPAUK, исправления где?
CHELOVEKPAUK
13 / 3 / 2
Регистрация: 01.08.2013
Сообщений: 332
Записей в блоге: 1
28.08.2013, 20:51  [ТС]     Программа перевода регистра символов #9
Цитата Сообщение от alsav22 Посмотреть сообщение
CHELOVEKPAUK, исправления где?
функция cin.get перестает работать - "отсутствуют экземпляры, перегруженная функция"; ошибка с2664, с1903

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    char ch;
    while (cin.get(unsigned char(ch)) && unsigned char(ch) != '#')
    {
        if (isupper(unsigned char(ch)) != 0)
        {
            tolower(unsigned char(ch));
            cout << unsigned char(ch);
        }
        if (islower(unsigned char(ch)) != 0)
        {
            toupper(unsigned char(ch));
            cout << unsigned char(ch);
        }
        if (isdigit(unsigned char(ch)) != 0)
            continue;
    }
    system("pause");
Hugra
47 / 47 / 1
Регистрация: 18.07.2013
Сообщений: 138
Записей в блоге: 1
28.08.2013, 20:52     Программа перевода регистра символов #10
Цитата Сообщение от alsav22 Посмотреть сообщение
C++
1
else if (isupper(unsigned char(ch))!= 0)
И в других функциях cctype также сделать.
Это конечно избавит от ошибки, но не будет по прежнему выводить правильно русские символы.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
28.08.2013, 21:09     Программа перевода регистра символов #11
Цитата Сообщение от Hugra Посмотреть сообщение
Это конечно избавит от ошибки, но не будет по прежнему выводить правильно русские символы.
Правильный вывод русских символов - другая тема (таких на форуме "море", поиск в помощь). Я ответ дал по конкретной ошибке (скрин в 1 посте).

Добавлено через 4 минуты
Цитата Сообщение от CHELOVEKPAUK Посмотреть сообщение
функция cin.get перестает работать - "отсутствуют экземпляры, перегруженная функция"; ошибка с2664, с1903
Цитата Сообщение от alsav22 Посмотреть сообщение
И в других функциях cctype также сделать.
Зачем везде сделали?

Добавлено через 3 минуты
Вот в этих функциях: isdigit(), islower(), isupper(), toupper(), tolower().

Добавлено через 1 минуту
И вот такое:
C++
1
2
3
4
5
6
7
8
9
10
11
#include <windows.h>
 
int main()
{
  setlocale(0, "")
  SetConsoleCP(1251);
  SetConsoleOutputCP(1251);
  ...
}
 
 В свойствах консоли выбрать шрифт: Lucida Console
Hugra
47 / 47 / 1
Регистрация: 18.07.2013
Сообщений: 138
Записей в блоге: 1
28.08.2013, 21:15     Программа перевода регистра символов #12
Цитата Сообщение от alsav22 Посмотреть сообщение
Правильный вывод русских символов - другая тема (таких на форуме "море", поиск в помощь). Я ответ дал по конкретной ошибке (скрин в 1 посте).
Я не правильно выразил свою мысль. Я о том, что tolower(), toupper() не будут работать с русскими символами вообще.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
28.08.2013, 21:19     Программа перевода регистра символов #13
Цитата Сообщение от Hugra Посмотреть сообщение
Я не правильно выразил свою мысль. Я о том, что tolower(), toupper() не будут работать с русскими символами вообще.
Никогда не будут? Или без настройки не будут?
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
26
27
28
29
30
31
32
33
#include <iostream>
#include <Windows.h>
#include <string>
#include <cctype>
 
using namespace std;
 
int main()
{
    setlocale(0, "");
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    
    char ch;
    cout << "Вводите текст: ";
    while (cin.get(ch) && ch != '@')
    {
        if (isdigit(unsigned char(ch)) != 0)
            continue;
        else if (islower(unsigned char(ch)) != 0)
        {
            ch = toupper(unsigned char(ch));
              cout << ch;
        }
        else if (isupper(unsigned char(ch)) != 0)
        {
            ch = tolower(unsigned char(ch));
              cout << ch;
        }
    }
 
    system("pause");
}
Миниатюры
Программа перевода регистра символов  
akk
44 / 44 / 7
Регистрация: 28.01.2012
Сообщений: 341
28.08.2013, 22:01     Программа перевода регистра символов #14
Вот мой вариант, он обрабатывает русские символы.
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
26
27
28
29
30
31
32
33
34
35
36
37
#include <iostream>
#include <Windows.h>
#include <string>
#include <cctype>
#include <conio.h>
#include <locale.h> 
using namespace std;
 
int main()
{
    setlocale(LC_ALL,"Russian");
    SetConsoleCP(866);
    char ch;
    cout << "Вводите текст: "<<endl;
 
    while (ch=_getch())
    {
        SetConsoleCP(866);
        if (isdigit(ch) != 0)
            continue;
        else if (islower(ch) != 0)
        {
            ch = toupper(ch);
              cout<<(ch);
        }
        else if (isupper(ch) != 0)
        {
            ch = tolower(ch);
              cout << ch;
        }
        if (ch=='@') break;
        
        SetConsoleCP(1251);
    }
 
    system("pause");
}
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
28.08.2013, 22:06     Программа перевода регистра символов #15
Цитата Сообщение от akk Посмотреть сообщение
Вот мой вариант, он обрабатывает русские символы.
При начале ввода, выбрасывает ошибку из первого поста.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.08.2013, 22:47     Программа перевода регистра символов
Еще ссылки по теме:

Си, программа перевода в другие СС - C++
Дано целое десятичное число. вывести его как число в системе счисления с основанием 11 Если у кого-то есть решение, скиньте плиз...

Программа перевода числа из 10 СС в 2 СС - C++
У Дейтлов есть задача: Они предлагают следующие инструкции по переводу чисел: 10 СС -&gt; 2 СС 10 СС -&gt; 8 СС

Программа перевода чисел из СС - C++
unsigned char X; int i, k; scanf(&quot;%d&quot;,&amp;X); for (i=7; i&gt;=0; i--) { k = ((X &gt;&gt; i) &amp; 1); printf(&quot;%d&quot;, k); } ...

Программа перевода из 10-ой с/с в n-ую и обратно - C++
Пытаюсь составить программу перевода.. Ошибки исправил, но сами формулы, видимо, не верны. Можете помочь? Заранее спасибо. #include...

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


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

Или воспользуйтесь поиском по форуму:
akk
44 / 44 / 7
Регистрация: 28.01.2012
Сообщений: 341
28.08.2013, 22:47     Программа перевода регистра символов #16
Цитата Сообщение от alsav22 Посмотреть сообщение
При начале ввода, выбрасывает ошибку из первого поста.
В GCC работает нормально.
В MSVS проблема в том, что на русской раскладке getch возвращает отрицательное значение.
Вот код, который работает в MSVS
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
// ConsoleApplication2.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream>
#include <Windows.h>
#include <string>
#include <cctype>
#include <conio.h>
#include <locale.h> 
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL,"Russian");
    SetConsoleCP(866);
 
    unsigned char ch;
    cout << "Вводите текст: "<<endl;
    SetConsoleCP(1251);
    while (ch=_getch())
    {
        SetConsoleCP(866);
        if (isdigit(ch) != 0)
            continue;
        else if (islower(ch) != 0)
        {
            ch = toupper(ch);
              cout<<(ch);
        }
        else if (isupper(ch) != 0) 
        {
            ch = tolower(ch);
              cout << ch;
        }
        if (ch=='@') break;
        
        SetConsoleCP(1251);
    }
 
    system("pause");
}
Yandex
Объявления
28.08.2013, 22:47     Программа перевода регистра символов
Ответ Создать тему
Опции темы

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