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

Число прописью, от 1 до 99 на русском - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.89
Macar
0 / 0 / 0
Регистрация: 01.08.2011
Сообщений: 9
30.08.2011, 21:57     Число прописью, от 1 до 99 на русском #1
Программа работает, но не совсем правильно, отлично выводит числа от 1 до 20 потом при вводе
21 - выводит один один;
47 - выводит семь семь;
83 - выводит три три.
Помогите исправить ошибку.
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
#include <iostream>
#include <windows.h>
using namespace std;
 char*Rus(const char* text);
 int main()
{
        int k;
        char *s,*s1;
        cin>>k;
        s1="";
        s="";
    if ((k>=10) && (k<20))
    {
        switch(k)
        {
         case 10: s=Rus("десять");break;
         case 11: s=Rus("одиннадцать");break;
         case 12: s=Rus("двенадцать");break;
         case 13: s=Rus("тринадцать");break;
         case 14: s=Rus("четырнадцать");break;
         case 15: s=Rus("пятнадцать");break;
         case 16: s=Rus("шестнадцать");break;
         case 17: s=Rus("семнадцать");break;
         case 18: s=Rus("восемнадцать");break;
         case 19: s=Rus("девятнадцать");break;
        }
    }
    else
    {
     switch(k/10)
     {
        case 2: s=Rus("двадцать");break;
        case 3: s=Rus("тридцать");break;
        case 4: s=Rus("сорок");break;
        case 5: s=Rus("пятьдесят");break;
        case 6: s=Rus("шестьдесят");break;
        case 7: s=Rus("семьдесят");break;
        case 8: s=Rus("восемьдесят");break;
        case 9: s=Rus("девяносто");break;
       
     };
     switch(k%10)
     {
        case 1: s1=Rus("один");break;
        case 2: s1=Rus("два");break;
        case 3: s1=Rus("три");break;
        case 4: s1=Rus("четыре");break;
        case 5: s1=Rus("пять");break;
        case 6: s1=Rus("шесть");break;
        case 7: s1=Rus("семь");break;
        case 8: s1=Rus("восемь");break;
        case 9: s1=Rus("девять");break;   
        };
    };
    cout<<s<<" "<<s1<<endl;
    return 0;
}
char bufRus[500];
char* Rus(const char* text) {
    CharToOemA(  text, bufRus);
    return bufRus;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
30.08.2011, 22:46     Число прописью, от 1 до 99 на русском #2
Функция Rus использует буфер bufRus для преобразования и возвращает указатель на этот буфер. Следующий вызов Rus изменяет значение в буфере, но возвращает тот же самый указатель. Поэтому предыдущий указатель указывает теперь уже на новое содержимое того же самого буфера. То есть результат, полученный вызовом Rus можно использовать лишь до следующего вызова этой функции, иначе же полученную строку придётся скопировать.

Добавлено через 3 минуты
Можно, к примеру, s и s1 сделать массивами
C++
1
char s[500], s1[500];
А вместо присваивания использовать функцию strcpy()
C++
1
case 2: strcpy(s, Rus("двадцать")); break;
Добавлено через 1 минуту
Или же вместо строк в C-стиле использовать std::string
Day
 Аватар для Day
1149 / 954 / 57
Регистрация: 29.10.2009
Сообщений: 1,384
30.08.2011, 23:34     Число прописью, от 1 до 99 на русском #3
Macar, Советую воспользоваться поиском по форуму. Где-то я видел решение твоей задачи для чисел до квадриллиона. Если, конечно, тебе это интересно.
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
832 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
30.08.2011, 23:45     Число прописью, от 1 до 99 на русском #4
Цитата Сообщение от Day Посмотреть сообщение
Где-то я видел решение твоей задачи для чисел до квадриллиона
может быть тут
Вывести число прописью
Day
 Аватар для Day
1149 / 954 / 57
Регистрация: 29.10.2009
Сообщений: 1,384
30.08.2011, 23:52     Число прописью, от 1 до 99 на русском #5
PointsEqual, Совершенно верно. Просто забыл - где, а искать было в лом.
Macar
0 / 0 / 0
Регистрация: 01.08.2011
Сообщений: 9
31.08.2011, 00:13  [ТС]     Число прописью, от 1 до 99 на русском #6
grizlik78 Ваш вариант мне больше понятен, только теперь проблема в том что при вводе цифр от 1 до 20 и 30, 40, 50... выводит лишние символы. Прошу прощения может я что то не так сделал, я пока в программировании не силен
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
66
67
#include <iostream>
#include <windows.h>
using namespace std;
 char*Rus(const char* text);
 
int main()
{
        int k;
        char s[500], s1[500];
        cin>>k;
      //  s1="";
       // s="";
    if ((k>=10) && (k<20))
    {
        switch(k)
        {
         case 10: strcpy (s, Rus("десять"));break;
         case 11: strcpy (s, Rus("одиннадцать"));break;
         case 12: strcpy (s, Rus("двенадцать"));break;
         case 13: strcpy (s, Rus("тринадцать"));break;
         case 14: strcpy (s, Rus("четырнадцать"));break;
         case 15: strcpy (s, Rus("пятнадцать"));break;
         case 16: strcpy (s, Rus("шестнадцать"));break;
         case 17: strcpy (s, Rus("семнадцать"));break;
         case 18: strcpy (s, Rus("восемнадцать"));break;
         case 19: strcpy (s, Rus("девятнадцать"));break;
        }
    }
    else
    {
     switch(k/10)
     {
            
 
        case 2: strcpy (s, Rus("двадцать")); break;
        case 3: strcpy (s, Rus("тридцать"));break;
        case 4: strcpy (s, Rus("сорок"));break;
        case 5: strcpy (s, Rus("пятьдесят"));break;
        case 6: strcpy (s, Rus("шестьдесят"));break;
        case 7: strcpy (s, Rus("семьдесят"));break;
        case 8: strcpy (s, Rus("восемьдесят"));break;
        case 9: strcpy (s, Rus("девяносто"));break;
       
     };
     switch(k%10)
     {
        case 1: strcpy (s1 , Rus("один"));break;
        case 2: strcpy (s1 , Rus("два"));break;
        case 3: strcpy (s1 , Rus("три"));break;
        case 4: strcpy (s1 , Rus("четыре"));break;
        case 5: strcpy (s1 , Rus("пять"));break;
        case 6: strcpy (s1 , Rus("шесть"));break;
        case 7: strcpy (s1 , Rus("семь"));break;
        case 8: strcpy (s1 , Rus("восемь"));break;
        case 9: strcpy (s1 , Rus("девять"));break;
       
        };
    };
    
    cout<<s<<" "<<s1<<endl;
    return 0;
}
char bufRus[500];
char* Rus(const char* text) {
    CharToOemA(  text, bufRus);
    return bufRus;
}
Миниатюры
Число прописью, от 1 до 99 на русском  
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
31.08.2011, 00:41     Число прописью, от 1 до 99 на русском #7
Ну так ведь теперь строки изначально не инициализированы.
C++
1
char s[500] = "", s1[500] = "";
или
C++
1
2
strcpy(s, "");
strcpy(s1, "");
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.08.2011, 01:04     Число прописью, от 1 до 99 на русском
Еще ссылки по теме:

C++ Вывести прописью введенное пользователем число
C++ Число прописью
Вывести число прописью C++

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

Или воспользуйтесь поиском по форуму:
Macar
0 / 0 / 0
Регистрация: 01.08.2011
Сообщений: 9
31.08.2011, 01:04  [ТС]     Число прописью, от 1 до 99 на русском #8
Огромное спасибо!!!grizlik78
Yandex
Объявления
31.08.2011, 01:04     Число прописью, от 1 до 99 на русском
Ответ Создать тему
Опции темы

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