Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/21: Рейтинг темы: голосов - 21, средняя оценка - 4.52
9 / 9 / 4
Регистрация: 10.05.2011
Сообщений: 101

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

03.05.2012, 14:04. Показов 4204. Ответов 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)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.05.2012, 14:04
Ответы с готовыми решениями:

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

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

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

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

Добавлено через 2 минуты
Цитата Сообщение от Raikerian Посмотреть сообщение
char s;
Выделяете память под символ (один!) s, а далее:
Цитата Сообщение от Raikerian Посмотреть сообщение
case 1: s = "сто ";
пытаетесь положить в этот участок памяти больше 1 символа. Нехорошо.
Надо:
C++
1
char* s;//или char s[size], или string s;
1
9 / 9 / 4
Регистрация: 10.05.2011
Сообщений: 101
03.05.2012, 14:39  [ТС]
спасибо! с объявлением разобрался.
подскажите пожалуйста функцию для склеивания строк, ну как например в задаче где += оператор.
0
 Аватар для amfisat
70 / 70 / 36
Регистрация: 16.06.2009
Сообщений: 240
03.05.2012, 14:56
strcat (куда, что)
0
95 / 64 / 5
Регистрация: 03.07.2011
Сообщений: 148
03.05.2012, 14:56
А
C++
1
strcat
не подходит?
0
 Аватар для amfisat
70 / 70 / 36
Регистрация: 16.06.2009
Сообщений: 240
03.05.2012, 15:08
И еще: после каждого case break-и, думаете, не нужны? - запУстите программу, удивитесь результату без них.
0
9 / 9 / 4
Регистрация: 10.05.2011
Сообщений: 101
03.05.2012, 15:09  [ТС]
когда использую strcat, то открывает strcat.asm и выбивает ошибку про нарушение прав доступа при записи.
в чем может быть дело?
пишу вида case 1: strcpy(s, "одинадцать ");
0
 Аватар для amfisat
70 / 70 / 36
Регистрация: 16.06.2009
Сообщений: 240
03.05.2012, 15:25
Цитата Сообщение от 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
70 / 70 / 36
Регистрация: 16.06.2009
Сообщений: 240
03.05.2012, 15:27
У меня всё отлично работает.
Миниатюры
Вывести строку-описание данного числа  
0
9 / 9 / 4
Регистрация: 10.05.2011
Сообщений: 101
03.05.2012, 15:28  [ТС]
упс, ошибся! писал именно strcat (тут не правильно написал).
вообщем обе функции не работают, выбивая ошибки памяти и открывая какието файлы(
0
 Аватар для amfisat
70 / 70 / 36
Регистрация: 16.06.2009
Сообщений: 240
03.05.2012, 15:30
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Я могу скинуть тот код, который отлично у меня работает.
Вот он
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
9 / 9 / 4
Регистрация: 10.05.2011
Сообщений: 101
03.05.2012, 16:14  [ТС]
Спасибо огромное! Теперь разобрался.
Суть оказывается была проста, я просто не совсем понимал как и когда использовать strcat() и strcpy().
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.05.2012, 16:14
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru