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

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

Восстановить пароль Регистрация
 
Raikerian
9 / 9 / 1
Регистрация: 10.05.2011
Сообщений: 101
03.05.2012, 14:04     Вывести строку-описание данного числа #1
Задача:
Дано целое число в диапазоне 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> Не существует контекста, в котором такое преобразование возможно
Что не так делаю и как правильно объявить/присвоить?

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

C++ Вывести строку-описание заданного числа
C++ Строка: Вывести строку-описание данного числа, например: 256 — «двести пятьдесят шесть»
Вывести строку – словесное описание указанного возраста C++
Вывести строку — словесное описание данного числа C++
C++ Дано целое число K. Нужно вывести строку описание оценки, которая отвечает числу
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
amfisat
 Аватар для amfisat
67 / 67 / 1
Регистрация: 16.06.2009
Сообщений: 235
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;
Raikerian
9 / 9 / 1
Регистрация: 10.05.2011
Сообщений: 101
03.05.2012, 14:39  [ТС]     Вывести строку-описание данного числа #3
спасибо! с объявлением разобрался.
подскажите пожалуйста функцию для склеивания строк, ну как например в задаче где += оператор.
amfisat
 Аватар для amfisat
67 / 67 / 1
Регистрация: 16.06.2009
Сообщений: 235
03.05.2012, 14:56     Вывести строку-описание данного числа #4
strcat (куда, что)
andy_111
90 / 59 / 1
Регистрация: 03.07.2011
Сообщений: 148
03.05.2012, 14:56     Вывести строку-описание данного числа #5
А
C++
1
strcat
не подходит?
amfisat
 Аватар для amfisat
67 / 67 / 1
Регистрация: 16.06.2009
Сообщений: 235
03.05.2012, 15:08     Вывести строку-описание данного числа #6
И еще: после каждого case break-и, думаете, не нужны? - запУстите программу, удивитесь результату без них.
Raikerian
9 / 9 / 1
Регистрация: 10.05.2011
Сообщений: 101
03.05.2012, 15:09  [ТС]     Вывести строку-описание данного числа #7
когда использую strcat, то открывает strcat.asm и выбивает ошибку про нарушение прав доступа при записи.
в чем может быть дело?
пишу вида case 1: strcpy(s, "одинадцать ");
amfisat
 Аватар для amfisat
67 / 67 / 1
Регистрация: 16.06.2009
Сообщений: 235
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;
amfisat
 Аватар для amfisat
67 / 67 / 1
Регистрация: 16.06.2009
Сообщений: 235
03.05.2012, 15:27     Вывести строку-описание данного числа #9
У меня всё отлично работает.
Миниатюры
Вывести строку-описание данного числа  
Raikerian
9 / 9 / 1
Регистрация: 10.05.2011
Сообщений: 101
03.05.2012, 15:28  [ТС]     Вывести строку-описание данного числа #10
упс, ошибся! писал именно strcat (тут не правильно написал).
вообщем обе функции не работают, выбивая ошибки памяти и открывая какието файлы(
amfisat
 Аватар для amfisat
67 / 67 / 1
Регистрация: 16.06.2009
Сообщений: 235
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;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.05.2012, 16:14     Вывести строку-описание данного числа
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Raikerian
9 / 9 / 1
Регистрация: 10.05.2011
Сообщений: 101
03.05.2012, 16:14  [ТС]     Вывести строку-описание данного числа #12
Спасибо огромное! Теперь разобрался.
Суть оказывается была проста, я просто не совсем понимал как и когда использовать strcat() и strcpy().
Yandex
Объявления
03.05.2012, 16:14     Вывести строку-описание данного числа
Ответ Создать тему
Опции темы

Текущее время: 14:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru