Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/29: Рейтинг темы: голосов - 29, средняя оценка - 4.72
6 / 6 / 4
Регистрация: 09.11.2011
Сообщений: 131
1

Заменить цифры словами

23.07.2013, 23:14. Показов 5685. Ответов 19
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток. Читаю книжку Кочан Стефан, в 6 главе есть задача.

Пользователь вводит число, а на выходе должно получиться, что каждая цифра заменяется словом.
пример. 123, "one", "two", "three".

использовать можно только цикли, управляющие конструкции. без всякой там арифметики указателей и прочих мантр true C.

Код есть, но он уныл и не работает, потому что нет алгоритма(

Всем + в репу.

PS. Без решенной задачи не читаю дальше книгу.
PSS. Очень прошу не выкладывать решение, подтолкните меня в нужном направление, так хотя бы пойму что-нибудь
1
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.07.2013, 23:14
Ответы с готовыми решениями:

Заменить цифры от 0 до 9 словами
Заменить цифры от 0 до 9 словами (если подряд встречаются две цифры и более, то данное число...

Цифры строки заменить на другие цифры
помогите, написали с однокурсником программу и не можешь нормально запустить #include<stdio.h>...

Заменить интервалы между словами на 2 пробела
Здравствуйте, нужно заменить интервалы между словами на 2 пробела. Только нужно сделать с помощью...

Прочитать из файла числа и заменить словами
Требуется прочитать из файла целые числа,(1, 2, 3, 4, 5...) и если число делиться без остатка на 5,...

19
19 / 19 / 7
Регистрация: 17.05.2013
Сообщений: 72
24.07.2013, 00:08 2
считываешь по символу до EOF, скажем, и применяешь оператор switch. имхо все что тут нужно
1
6 / 6 / 4
Регистрация: 09.11.2011
Сообщений: 131
24.07.2013, 00:20  [ТС] 3
Цитата Сообщение от EndWar Посмотреть сообщение
считываешь по символу до EOF, скажем, и применяешь оператор switch. имхо все что тут нужно
я с Вами полностью согласен, но дело в том, что в книге пока были только типы данных, циклы и управ. конструкции.
О getchar(), EOF не было ни слова. Поэтому надо использовать, то что дано.
0
408 / 227 / 43
Регистрация: 10.02.2013
Сообщений: 780
24.07.2013, 00:30 4
ну напиши что ты уже знаешь )
0
19 / 19 / 7
Регистрация: 17.05.2013
Сообщений: 72
24.07.2013, 00:37 5
ну можно switch заменить на 9 конструкций if else скажем и считывать символ функцией которую ты уже знаешь до символа новой строки
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
24.07.2013, 06:38 6
gnuvse, массивы в книге уже были?
1
3 / 3 / 1
Регистрация: 18.07.2013
Сообщений: 39
24.07.2013, 11:20 7
создаешь цикл в котором переменной "c" присваивает введенную цифру.Виходом с цикла может быть знак ентер или пробил.В теле цикла с помощью if проверяешь "c" == 1,2,3 и т.д. кликнув равна выводишь название цифры.
1
6 / 6 / 4
Регистрация: 09.11.2011
Сообщений: 131
24.07.2013, 17:58  [ТС] 8
Цитата Сообщение от cakon Посмотреть сообщение
даешь цикл в котором переменной "c" присваивает введенную цифру.Виходом с цикла может быть знак ентер или пробил.В теле цикла с помощью if проверяешь "c" == 1,2,3 и т.д. кликнув равна выводишь название цифры.
Нужно сразу, ввёл число, получил результат.

Цитата Сообщение от EndWar Посмотреть сообщение
ну можно switch заменить на 9 конструкций if else скажем и считывать символ функцией которую ты уже знаешь до символа новой строки
Цитата Сообщение от shurikspk Посмотреть сообщение
ну напиши что ты уже знаешь )
Если было все так просто, я даже бы не писал сюда



Цитата Сообщение от Nameless One Посмотреть сообщение
gnuvse, массивы в книге уже были?
Нет, только цикли, if-else, switch-case, :?, printf, scanf
А так Вы правы, самый норм вариант, засунуть число в массив, пройти по его индексам и значения каждого индекса сравнить.
Если я правильно понял Вашу мысль
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
24.07.2013, 18:13 9
Цитата Сообщение от gnuvse Посмотреть сообщение
Если я правильно понял Вашу мысль
Неа, неправильно. Я предлагаю создать массив, содержащий текстовое представление числа. Элементом с индексом 0 будет строка «zero», с индексом 1 — строка «one» и т.д. Считываем число в строковую переменную, для каждого символа из этой строки получаем числовой индекс, по которому определяем строку из массива. Эту строку и выводим для каждого символа.

Я бы привел код, но ты, как я понял, готовый код не хочешь.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
24.07.2013, 18:15 10
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Цитата Сообщение от gnuvse Посмотреть сообщение
засунуть число в массив, пройти по его индексам и значения каждого индекса сравнить
Не, всё проще
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
 
const char * DIGITS[] = { "ZERO", "ONE", "TWO", "THREE", "FOUR", "FIVE", "SIX", "SEVEN", "EIGHT", "NINE" };
 
void print_as_digits(unsigned n) {
    if ( n ) {
        print_as_digits(n / 10);
        printf("%s ", DIGITS[n % 10]);
    }
}
 
int main ( void ) {
    unsigned n;
    
    while ( printf("Number: ") && scanf("%u", &n) == 1 ) {
        if ( n )
            print_as_digits(n);
        else 
            printf("%s", *DIGITS);
        printf("\n");
    }
}
1
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
24.07.2013, 18:17 11
easybudda, спрячь под спойлеры!

Цитата Сообщение от gnuvse Посмотреть сообщение
PSS. Очень прошу не выкладывать решение, подтолкните меня в нужном направление, так хотя бы пойму что-нибудь
0
easybudda
24.07.2013, 18:23
  #12

Не по теме:

Nameless One, что-то мне подсказывает, что это решение вопросов больше, чем сама задача, вызовет... ;)

0
6 / 6 / 4
Регистрация: 09.11.2011
Сообщений: 131
24.07.2013, 19:14  [ТС] 13
Ознакомьтесь с выводом Вашей программы
Заменить цифры словами


Добавлено через 7 минут
Цитата Сообщение от Nameless One Посмотреть сообщение
Неа, неправильно. Я предлагаю создать массив, содержащий текстовое представление числа. Элементом с индексом 0 будет строка «zero», с индексом 1 — строка «one» и т.д. Считываем число в строковую переменную, для каждого символа из этой строки получаем числовой индекс, по которому определяем строку из массива. Эту строку и выводим для каждого символа.

Я бы привел код, но ты, как я понял, готовый код не хочешь.
Выкладывайте.

Цитата Сообщение от easybudda Посмотреть сообщение

Не по теме:

Nameless One, что-то мне подсказывает, что это решение вопросов больше, чем сама задача, вызовет... ;)

Может быть Вы и правы. Но без вопросов никак, а то из меня вырастит быдло_хеллоу_ворлдщик
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
24.07.2013, 19:29 14
Цитата Сообщение от gnuvse Посмотреть сообщение
Ознакомьтесь с выводом Вашей программы
Ознакомьтесь с максимальным значением, которое может хранить переменная типа unsigned int
Код
$ grep UINT_MAX /usr/include/limits.h 
#  define UINT_MAX	4294967295U

Не по теме:

Цитата Сообщение от gnuvse Посмотреть сообщение
Но без вопросов никак
Так никто же не против! Задавайте, не стесняйтесь! Форумы как-раз для этого...

0
6 / 6 / 4
Регистрация: 09.11.2011
Сообщений: 131
24.07.2013, 19:47  [ТС] 15
Цитата Сообщение от easybudda Посмотреть сообщение
Ознакомьтесь с максимальным значением, которое может хранить переменная типа unsigned int
Код
$ grep UINT_MAX /usr/include/limits.h 
#  define UINT_MAX	4294967295U

Не по теме:


Так никто же не против! Задавайте, не стесняйтесь! Форумы как-раз для этого...

Да, и в правду, моё значение перевалило за допустимое, извиняюсь
0
19 / 19 / 7
Регистрация: 17.05.2013
Сообщений: 72
24.07.2013, 19:51 16
если в книге уже была конструкция switch, printf и scanf, то можно было бы сделать и по моему совету, не знаю что вас не устроило
0
Z3JheSBoYXQ=
342 / 237 / 83
Регистрация: 08.07.2012
Сообщений: 577
24.07.2013, 19:54 17
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
 
int main(){
  char array[][20] = {"one","two","three","four","five"};
  unsigned int sym;
        
  while(scanf("%ui", &sym)){        
    if (sym>=0 && sym<6){
      printf("%s", array[sym]);     
    } else {
      printf("wrong\n");
    }             
  }
  return 0;
}
определяем двумерный массив, инициализируем его 5 строковыми лексемами.
далее в цикле считываем значение с клавиатуры форматированным вводом, условием выхода из цикла является любое значение отличное от спецификатора %ui = целочисленного без знакового. Это может быть буквенное значение к примеру.
И в цикле проверяем на причастность введенного значения диапазону, если входит в диапазон то показываем строковую лексему из массива согласно индекса полученного от пользователя.
Да, по scanf условие истинно будет оставаться до тех пор, пока scanf возвращает корректные значения, то есть количество полученных символов scanf будет больше 0 если оно корректно спецификатору.
1
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
24.07.2013, 19:56 18
gnuvse, вот так можно очень много циферок вывести:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
 
const char * DIGITS[] = { "ZERO", "ONE", "TWO", "THREE", "FOUR", "FIVE", "SIZ", "SEVEN", "EIGHT", "NINE" };
 
int main(void) {
    int c;
    
    while ( ( c = getchar() ) != EOF ) {
        if ( c >= '0' && c <= '9' )
            printf("%s ", DIGITS[c - '0']);
        else
            printf("%c", c);
    }
    
    return 0;
}
0
Эксперт С++
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
25.07.2013, 03:21 19
Цитата Сообщение от gnuvse Посмотреть сообщение
Выкладывайте.
https://www.cyberforum.ru/post4812283.html
0
6 / 6 / 4
Регистрация: 09.11.2011
Сообщений: 131
25.07.2013, 18:02  [ТС] 20
Всем спасибо за ответы, попробовал Ваши варианты.

PS. Репа поднята
0
25.07.2013, 18:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.07.2013, 18:02
Помогаю со студенческими работами здесь

Ввести строку, заменить интервалы между словами на 2 пробела
написала вот такой код,но здесь добавляет доп.пробел,а мне надо,чтоб любой интервал(хоть там 5...

Ввести строку, заменить интервалы между словами на 2 пробела
Ввести строку, заменить интервалы между словами на 2 пробела. Попробовал сосчитать сколько всего...

Заменить первую букву у слов, следующих за словами die, der, das, на прописную
В предложении, состоящем из слов, разделенных одним пробелом, заменить первую букву у слов,...

Заменить цифры от 0 до 9 словами
Нужно написать две проги: 1.Написать программу, которая вводит текст, состоящий из нескольких...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru