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

Заменить цифры, написанные буквами - C++

Восстановить пароль Регистрация
 
Looney
0 / 0 / 0
Регистрация: 13.03.2015
Сообщений: 6
02.07.2015, 16:34     Заменить цифры, написанные буквами #1
Требуется написать консольное приложение, в котором пользователь должен вводить текст, а выводиться должен тот же текст, но с цифрами, записанными буквами, на цифры.(ограничиться двузначными числами).

Долго пытался что-то сделать. Дошел до 2 способов.

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
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
void main(){
    cout << "Enter the tex on english:";
    string str;
    getline(cin, str);
    str.replace(str.find("one"), 3, "1");
    str.replace(str.find("two"), 3, "2");
    str.replace(str.find("three"), 5, "3");
    str.replace(str.find("four"), 4, "4");
    str.replace(str.find("five"), 4, "5");
    str.replace(str.find("six"), 3, "6");
    str.replace(str.find("seven"), 5, "7");
    str.replace(str.find("eight"), 5, "8");
    str.replace(str.find("nine"), 4, "9");
    str.replace(str.find("ten"), 3, "10");
    str.replace(str.find("eleven"), 6, "11");
    str.replace(str.find("twelve"), 6, "12");
    str.replace(str.find("thirteen"), 8, "13");
    str.replace(str.find("fourteen"), 8, "14");
    str.replace(str.find("fifteen"), 7, "15");
    str.replace(str.find("sixteen"), 7, "16");
    str.replace(str.find("seventeen"), 9, "17");
    str.replace(str.find("eighteen"), 8, "18");
    str.replace(str.find("nineteen"), 8, "19");
    str.replace(str.find("twenty"), 6, "20");
    str.replace(str.find("thirty"), 6, "30");
    str.replace(str.find("fourty"), 6, "40");
    str.replace(str.find("fifty"), 5, "50");
    str.replace(str.find("sixty"), 5, "60");
    str.replace(str.find("seventy"), 7, "70");
    str.replace(str.find("eighty"), 6, "80");
    str.replace(str.find("ninety"), 6, "90");
    cout << str;
    system("pause");
}
Но тут дальше 1 не проходит. Видимо функция модифицирует строку из-за чего повторное использование невозможно. =(

Второй способ:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include "stdafx.h"
#include <iostream>
#include <string>
 
 
using namespace std;
void main(){
    cout << "Enter the tex on english:";
    char str[100];
    gets(str);
    char * pch = strtok(str, " ");
    while (pch != NULL)
    {
        if (pch == "one"){
            cout << " 1";
        }
        else cout << pch<< " ";
        pch = strtok(NULL, " ");
    }
    system("pause");
}
Не очень разбираюсь в указателях, ну и тут не смог довести до ума.

Буду очень благодарен, если кто-нибудь поможет реализовать данное приложение =)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.07.2015, 16:34     Заменить цифры, написанные буквами
Посмотрите здесь:

C++ Заменить цифры в строке на '*'
C++ Заменить цифры от 0 до 9 словами
Сформировать из значений массива другой массив, расположив в нем сначала цифры, затем – буквы, затем - символы, не являющихся ни буквами, ни цифрами C++
Удалить все символы в строке, не являющиеся буквами и заменить множественные пробелы одним C++
Переводить числа, написанные словами, в числа, написанные цифрами C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Рыжий Лис
Просто Лис
 Аватар для Рыжий Лис
209 / 164 / 44
Регистрация: 17.05.2012
Сообщений: 611
Записей в блоге: 4
02.07.2015, 17:21     Заменить цифры, написанные буквами #2
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
#include <iostream>
#include <string>
using namespace std;
 
void func(string &str, string str2, string str3){
  int pos = str.find(str2);
  while (pos!=-1) {
    str.replace(pos, str2.length(), str3);
    pos = str.find(str2);
  }
}
 
int main(){
    cout << "Enter the tex on english: ";
    string str;
    getline(cin, str);
    func(str,"one","1");
    /*
    str.replace(str.find("two"), 3, "2");
    str.replace(str.find("three"), 5, "3");
    str.replace(str.find("four"), 4, "4");
    str.replace(str.find("five"), 4, "5");
    str.replace(str.find("six"), 3, "6");
    str.replace(str.find("seven"), 5, "7");
    str.replace(str.find("eight"), 5, "8");
    str.replace(str.find("nine"), 4, "9");
    str.replace(str.find("ten"), 3, "10");
    str.replace(str.find("eleven"), 6, "11");
    str.replace(str.find("twelve"), 6, "12");
    str.replace(str.find("thirteen"), 8, "13");
    str.replace(str.find("fourteen"), 8, "14");
    str.replace(str.find("fifteen"), 7, "15");
    str.replace(str.find("sixteen"), 7, "16");
    str.replace(str.find("seventeen"), 9, "17");
    str.replace(str.find("eighteen"), 8, "18");
    str.replace(str.find("nineteen"), 8, "19");
    str.replace(str.find("twenty"), 6, "20");
    str.replace(str.find("thirty"), 6, "30");
    str.replace(str.find("fourty"), 6, "40");
    str.replace(str.find("fifty"), 5, "50");
    str.replace(str.find("sixty"), 5, "60");
    str.replace(str.find("seventy"), 7, "70");
    str.replace(str.find("eighty"), 6, "80");
    str.replace(str.find("ninety"), 6, "90");
    */
    cout << str;
}
Looney
0 / 0 / 0
Регистрация: 13.03.2015
Сообщений: 6
02.07.2015, 17:39  [ТС]     Заменить цифры, написанные буквами #3
Благодарю =)
Мкртчян Тигран
0 / 0 / 0
Регистрация: 18.05.2015
Сообщений: 1
02.07.2015, 17:55     Заменить цифры, написанные буквами #4
Хелпаните кто-нибудь, пожалуйста. В программе есть ввод фамилий, а потом ввод текста с этими фамилиями. А вывести надо откорректированый текст, где все фамилии и первые слова в предложении будут с заглавной буквы. Для первых слов в предложении я вроде разобрался, а с фамилиями не могу понять, как сделать. Есть вариант разбить строку с фамилиями strtok-ом, а потом сравнивать их в цикле с главным текстом. И если будут совпадения - делать с большой буквы. Только не понимаю, как обращаться к массиву слов. Помогите, пожалуйста.
Yandex
Объявления
02.07.2015, 17:55     Заменить цифры, написанные буквами
Ответ Создать тему
Опции темы

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