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

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

Войти
Регистрация
Восстановить пароль
 
Raikerian
9 / 9 / 1
Регистрация: 10.05.2011
Сообщений: 101
#1

Вывести строку-описание данного числа - C++

03.05.2012, 14:04. Просмотров 746. Ответов 11
Метки нет (Все метки)

Задача:
Дано целое число в диапазоне 100–999. Вывести строку-описание данного числа, например: 256 — «двести пятьдесят шесть», 814 — «восемьсот четырнадцать».
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include <iostream>
using namespace std;
int main()
{
    setlocale(LC_ALL, "");
    unsigned num;
ret:cout << "Введите число в диапазоне 100-999: ";
    cin >> num;
    if ((num<100) || (num>999)) goto ret;
    int temp = num/100;
    char s;
    switch (temp)
    {
    case 1: s = "сто ";
    case 2: s = "двести ";
    case 3: s = "триста ";
    case 4: s = "четыреста ";
    case 5: s = "пятьсот ";
    case 6: s = "шестьсот ";
    case 7: s = "семьсот ";
    case 8: s = "восемьсот ";
    case 9: s = "девятьсот ";
    }
    if (((num%100)>9) && (num%100)<20)
        switch (num%100)
        {
        case 10: s += "десять ";
        case 11: s += "одинадцать ";
        case 12: s += "двенадцать ";
        case 13: s += "тринадцать ";
        case 14: s += "четырнадцать ";
        case 15: s += "пятнадцать ";
        case 16: s += "шестнадцать ";
        case 17: s += "семнадцать ";
        case 18: s += "восемнадцать ";
        case 19: s += "девятнадцать ";
        }
    else switch (int((num%100)/10))
    {
    case 2: s += "двадцать ";
    case 3: s += "тридцать ";
    case 4: s += "сорок ";
    case 5: s += "пятьдесят ";
    case 6: s += "шестьдесят ";
    case 7: s += "семьдесят ";
    case 8: s += "восемьдесят ";
    case 9: s += "девяносто ";
    }
    switch ((num%100)%10)
    {
    case 1: s += "один ";
    case 2: s += "два ";
    case 3: s += "три ";
    case 4: s += "четыре ";
    case 5: s += "пять ";
    case 6: s += "шесть ";
    case 7: s += "семь ";
    case 8: s += "восемь ";
    case 9: s += "девять ";
    }
    cout << "\nВаше число: " << s << endl;
    cin.sync();
    cin.get();
    return 0;
}
Вкрай запутался со строками, как присвоить значение (текстовое) строке? Это в первом кейсе, и там постоянно выдаёт ошибку типа
error C2440: =: невозможно преобразовать "const char [5]" в "char"
1> Не существует контекста, в котором такое преобразование возможно
Что не так делаю и как правильно объявить/присвоить?

Ну и подскажите заодно функцию присвоения (приклеивания) к строке другой строки.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.05.2012, 14:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вывести строку-описание данного числа (C++):

Вывести строку — словесное описание данного числа - C++
12 Дано целое число, лежащее в диапазоне от –99 до 99. Вывести строку — словесное описание данного числа вида &quot;отрицательное двузначное...

Строка: Вывести строку-описание данного числа, например: 256 — «двести пятьдесят шесть» - C++
Дано целое число в диапазоне 100–999. Вывести строку-описание данного числа, например: 256 — «двести пятьдесят шесть», 814 — «во- семьсот...

Дано целое число в диапазоне 100–999. Вывести строку-описание данного числа, например: 256 — «двести пятьдесят - C++
Дано целое число в диапазоне 100–999. Вывести строку-описание данного числа, например: 256 — «двести пятьдесят шесть», 814 — «восемьсот...

Дано целое число , лежащие в диапазоне от -999 до 999.Вывести строку - словесного описание данного числа вида "отрицательное двухзначное число", "отри - C++
Дано целое число , лежащие в диапазоне от -999 до 999. Вывести строку - словесного описание данного числа вида &quot;отрицательное двухзначное...

Вывести строку-описание заданного числа - C++
If. Дано целое число, лежащее в диапазоне 1–999. Вывести его строку-описание вида «четное двузначное число», «нечетное трехзначное число»

Вывести строку-описание указанного возраста, обеспечив правильное согласование числа со словом «год» - C++
Дано целое число в диапазоне 20-69, определяющее возраст (в годах). Вывести строку-описание указанного возраста, обеспечив правильное...

11
amfisat
67 / 67 / 1
Регистрация: 16.06.2009
Сообщений: 240
03.05.2012, 14:17 #2
Перво-наперво избавьтесь от goto (замените циклом while), чтобы те, кто сюда заходит, не падали в обморок. Забудьте про goto.

Добавлено через 2 минуты
Цитата Сообщение от Raikerian Посмотреть сообщение
char s;
Выделяете память под символ (один!) s, а далее:
Цитата Сообщение от Raikerian Посмотреть сообщение
case 1: s = "сто ";
пытаетесь положить в этот участок памяти больше 1 символа. Нехорошо.
Надо:
C++
1
char* s;//или char s[size], или string s;
1
Raikerian
9 / 9 / 1
Регистрация: 10.05.2011
Сообщений: 101
03.05.2012, 14:39  [ТС] #3
спасибо! с объявлением разобрался.
подскажите пожалуйста функцию для склеивания строк, ну как например в задаче где += оператор.
0
amfisat
67 / 67 / 1
Регистрация: 16.06.2009
Сообщений: 240
03.05.2012, 14:56 #4
strcat (куда, что)
0
andy_111
90 / 59 / 2
Регистрация: 03.07.2011
Сообщений: 148
03.05.2012, 14:56 #5
А
C++
1
strcat
не подходит?
0
amfisat
67 / 67 / 1
Регистрация: 16.06.2009
Сообщений: 240
03.05.2012, 15:08 #6
И еще: после каждого case break-и, думаете, не нужны? - запУстите программу, удивитесь результату без них.
0
Raikerian
9 / 9 / 1
Регистрация: 10.05.2011
Сообщений: 101
03.05.2012, 15:09  [ТС] #7
когда использую strcat, то открывает strcat.asm и выбивает ошибку про нарушение прав доступа при записи.
в чем может быть дело?
пишу вида case 1: strcpy(s, "одинадцать ");
0
amfisat
67 / 67 / 1
Регистрация: 16.06.2009
Сообщений: 240
03.05.2012, 15:25 #8
Цитата Сообщение от Raikerian Посмотреть сообщение
strcpy(s, "одинадцать ");
Интересно, а как связаны strcpy и strcat? - перемудрили.

C++
1
strcat(s, "одиннадцать");
Добавлено через 1 минуту
Описание strcat

Добавлено через 12 минут
И вместо
Цитата Сообщение от Raikerian Посмотреть сообщение
case 1: s = "сто ";
и подобных строк лучше так:
C++
1
case 1: strcpy (s, "сто "); break;
0
amfisat
67 / 67 / 1
Регистрация: 16.06.2009
Сообщений: 240
03.05.2012, 15:27 #9
У меня всё отлично работает.
0
Миниатюры
Вывести строку-описание данного числа  
Raikerian
9 / 9 / 1
Регистрация: 10.05.2011
Сообщений: 101
03.05.2012, 15:28  [ТС] #10
упс, ошибся! писал именно strcat (тут не правильно написал).
вообщем обе функции не работают, выбивая ошибки памяти и открывая какието файлы(
0
amfisat
67 / 67 / 1
Регистрация: 16.06.2009
Сообщений: 240
03.05.2012, 15:30 #11
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Я могу скинуть тот код, который отлично у меня работает.
Вот он
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include <iostream>
using namespace std;
int main()
{
    setlocale(0, "");
    unsigned num;
    cout << "Введите число в диапазоне 100-999: ";
    cin >> num;
    
    int temp = num/100;
    char s[250];
    switch (temp)
    {
    case 1: strcpy (s, "сто "); break;
    case 2: strcpy (s,"двести "); break;
    case 3: strcpy (s,"триста "); break;
    case 4: strcpy (s,"четыреста "); break;
    case 5: strcpy (s,"пятьсот "); break;
    case 6: strcpy (s,"шестьсот "); break;
    case 7: strcpy (s,"семьсот "); break;
    case 8: strcpy (s,"восемьсот "); break;
    case 9: strcpy (s, "девятьсот "); break;
    }
    if (((num%100)>9) && (num%100)<20)
        switch (num%100)
        {
        case 10: strcat(s, "десять "); break;
        case 11: strcat(s, "одинадцать "); break;
        case 12: strcat(s, "двенадцать "); break;
        case 13: strcat(s, "тринадцать "); break;
        case 14: strcat(s, "четырнадцать "); break;
        case 15: strcat(s, "пятнадцать "); break;
        case 16: strcat(s, "шестнадцать "); break;
        case 17: strcat(s, "семнадцать "); break;
        case 18: strcat(s, "восемнадцать "); break;
        case 19: strcat(s, "девятнадцать "); break;
        }
    switch (int((num%100)/10))
    {
    case 2: strcat(s, "двадцать "); break;
    case 3: strcat(s, "тридцать "); break;
    case 4: strcat(s, "сорок "); break;
    case 5: strcat(s, "пятьдесят "); break;
    case 6: strcat(s, "шестьдесят "); break;
    case 7: strcat(s, "семьдесят "); break;
    case 8: strcat(s, "восемьдесят "); break;
    case 9: strcat(s, "девяносто "); break;
    }
    switch ((num%100)%10)
    {
    case 1: strcat(s, "один ");  break;
    case 2: strcat(s, "два "); break;
    case 3: strcat(s, "три "); break;
    case 4: strcat(s, "четыре "); break;
    case 5: strcat(s, "пять "); break;
    case 6: strcat(s, "шесть "); break;
    case 7: strcat(s, "семь "); break;
    case 8: strcat(s, "восемь "); break;
    case 9: strcat(s, "девять "); break;
    }
    cout << endl << "Ваше число: " << s << endl;
    cin.sync();
    cin.get();
    return 0;
}
1
Raikerian
9 / 9 / 1
Регистрация: 10.05.2011
Сообщений: 101
03.05.2012, 16:14  [ТС] #12
Спасибо огромное! Теперь разобрался.
Суть оказывается была проста, я просто не совсем понимал как и когда использовать strcat() и strcpy().
0
03.05.2012, 16:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.05.2012, 16:14
Привет! Вот еще темы с ответами:

Вывести строку – словесное описание указанного возраста - C++
Дано целое число в диапазоне от 20 до 80, определяющее возраст в годах. Вывести строку – словесное описание указанного возраста, обеспечив...

Вывести строку - описание указанного цифрами возраста - C++
задание:Дано целое число в диапазоне 20-99, определяющее возраст (в годах). Вывести строку-описание указанного возраста, обеспечив...

Вывести словесное описание заданного числа - C++
1.Дано целое число, лежащее в диапазоне от 1 до 9999. Вывести строку – словесное описание данного числа вида «четное двузначное число»,...

Дано целое число K. Нужно вывести строку описание оценки, которая отвечает числу - C++
добрый вечер, уважаемые программисты и любители кодить. помогите, пожалуйста, написать программу на языке C++ в визуальном режиме. вот...


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

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

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