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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Максим1827
0 / 0 / 0
Регистрация: 06.12.2012
Сообщений: 64
#1

Строка: Заменить каждую цифру 0…9 на слова - C++

22.01.2013, 21:05. Просмотров 471. Ответов 10
Метки нет (Все метки)

В произвольно взятом предложении заменить каждую цифру 0…9 на слова «ноль», «один», …, «девять».
Помогите с кодом

Добавлено через 9 минут
вверх
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.01.2013, 21:05
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Строка: Заменить каждую цифру 0…9 на слова (C++):

Каждую цифру заменить на заключенную в круглые скобки последовательность знаков - C++
Многострочный текст, введенный с клавиатуры, преобразовать следующим образом: каждая цифра заменяется на заключенную в круглые скобки...

Каждую цифру заменить на заключенную в круглые скобки последовательность знаков ‘+’ - C++
Многострочный текст, введенный с клавиатуры, преобразовать следующим образом: каждая цифра заменяется на заключенную в круглые скобки...

Каждую из малых латинских букв, предшествующих первому вхождению символа *, заменить на цифру 3 - C++
Если в тексте нет символа *, то оставить текст без изменений. Иначе каждую из малых латинских букв, предшествующих первому вхождению...

Каждую цифру текста, которая находится перед первым символом "+", заменить на запятую - C++
Всем доброго вечера, если Вам не сложно, помогите с задачей. Решить желательно, на С (Си), но если Вам лучше на С + +, буду также...

Каждую цифру текста, которая находится перед первым символом "+", заменить на запятую - C++
Дано текст. Если он не содержит символа "+", то оставить его без изменения. В противном случае каждую цифру, которая находится перед первым...

Заменить в файле каждую первую букву слова на прописную - C++
Написать программу, которая считывает текст из файла и выводит его на экран, заменив каждую первую букву слов на прописную. Помогите...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
lemegeton
2924 / 1353 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
22.01.2013, 21:54 #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
#include <iostream>
#include <cstring>
 
char *replaceDigits(char *destination, const char *source) {
  static const char DIGITS[10][6] = {"zero", "one", "two", "three", "four",
    "five", "six", "seven", "eight", "nine"};
  char *result = destination;
  while (*source != '\0') {
    if (*source - '0' > -1 && *source - '0' < 10) {
      for (const char *digit = DIGITS[*source - '0']; *digit != '\0'; ++digit)
        *destination++ = *digit;
    } else {
      *destination++ = *source;
    }
    ++source;
  }
  *destination = '\0';
  return result;
}
 
 
int main(int argc, char **argv) {
  
  char *result = new char[1024];
  std::cout << replaceDigits(result, "in 1941 there was a ww2") << std::endl;
  delete [] result;
 
  std::cin.get();
  return 0;
}
2
MrGluck
Модератор
Эксперт CЭксперт С++
7239 / 4407 / 642
Регистрация: 29.11.2010
Сообщений: 11,926
22.01.2013, 21:59 #3
C++
1
if (isdigit(*source))
1
Максим1827
0 / 0 / 0
Регистрация: 06.12.2012
Сообщений: 64
22.01.2013, 22:05  [ТС] #4
спасибо большое!но это ты сделал через функции, а мне бы желательно в самом просто виде, через обработку строковых литералов, но я щас попробую сам преобразовать

Добавлено через 3 минуты
вверх
0
zarko97
276 / 36 / 0
Регистрация: 11.10.2015
Сообщений: 381
10.06.2017, 16:43 #5
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
#include <iostream>
#include <string>
#include <cctype>
#include <map>
#include <sstream>
 
int main()
{
    std::locale::global(std::locale("rus"));
    std::string s = "ASD SD 12SDIUFJADDIFA SDA 11 DA 24DASDAA2 DDAA";
    std::map<int, std::string> map;
    std::ostringstream os;
    map[0] = "ноль";
    map[1] = "один";
    map[2] = "два";
    map[3] = "три";
    map[4] = "четыре";
    map[5] = "пять";
    map[6] = "шесть";
    map[7] = "семь";
    map[8] = "восемь";
    map[9] = "девять";
    for (auto ch : s) { 
        if (std::isdigit(ch)) {
            auto map_itr = map.find(ch - '0');
            os << map_itr->second;
        }
        else os << ch;
    }
    s = os.str();
    std::cout << s;
    return 0;
}
Добавлено через 2 часа 26 минут
вариант по-короче:
C++
1
std::map<int, std::string> map = {{0,"ноль"},{1,"один"},{2,"два"},{3,"три"},{4,"четыре"},{5,"пять"},{6,"шесть"},{7,"семь"},{8,"восемь"},{9,"девять"}};
Добавлено через 24 минуты
lemegeton, а не проще так:
C++
1
2
static const char* DIGITS[] = {"zero", "one", "two", "three", "four",
    "five", "six", "seven", "eight", "nine"};
0
Fixer_84
590 / 396 / 197
Регистрация: 30.04.2016
Сообщений: 1,077
10.06.2017, 18:18 #6
Максим1827, здравствуйте! Вот еще один несложный для понимания вариант программы:

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
#include <iostream>
#include <string>
 
using namespace std;
 
int main()
{
    const int N = 10;
    string digits[N] = { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" };
    string str, s;
    cout << "Введите строку (используйте цифры 0-9):" << endl;
    getline(cin, str);
    for (int i = 0; str[i]; i++)
    {
        if (isdigit(str[i]))
            s += digits[str[i] - '0'];
        else
            s += str[i];
    }
    cout << "Искомая строка:" << endl;
    cout << s << endl;
    cin.get();
    return 0;
}
0
zarko97
276 / 36 / 0
Регистрация: 11.10.2015
Сообщений: 381
22.06.2017, 00:30 #7
можно и проще:
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
#include <iostream>
#include <string>
#include <cctype>
#include <vector>
#include <sstream>
 
int main()
{
    std::locale::global(std::locale("rus"));
    std::string s = "ASD SD 12SDIUFJADDIFA SDA 11 DA 24DASDAA2 DDAA";
    std::vector<std::string> digits;
    std::ostringstream os;
    digits.push_back("ноль");
    digits.push_back("один");
    digits.push_back("два");
    digits.push_back("три");
    digits.push_back("четыре");
    digits.push_back("пять");
    digits.push_back("шесть");
    digits.push_back("семь");
    digits.push_back("восемь");
    digits.push_back("девять");
    for (auto ch : s) {
        (std::isdigit(ch)) ? os << digits[ch - '0'] : os << ch;
    } 
    s = os.str();
    std::cout << s;
    system("pause>>void");
    return EXIT_SUCCESS;
}
0
MrGluck
Модератор
Эксперт CЭксперт С++
7239 / 4407 / 642
Регистрация: 29.11.2010
Сообщений: 11,926
22.06.2017, 00:35 #8
Цитата Сообщение от zarko97 Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
digits.push_back("ноль");
* * digits.push_back("один");
* * digits.push_back("два");
* * digits.push_back("три");
* * digits.push_back("четыре");
* * digits.push_back("пять");
* * digits.push_back("шесть");
* * digits.push_back("семь");
* * digits.push_back("восемь");
* * digits.push_back("девять");
Есть же список инициализации.
0
zarko97
276 / 36 / 0
Регистрация: 11.10.2015
Сообщений: 381
22.06.2017, 00:39 #9
MrGluck, пришлось бы ползунок дергать
0
Captain Maxee
223 / 142 / 32
Регистрация: 15.12.2015
Сообщений: 488
22.06.2017, 01:38 #10
zarko97, Есть же Enter

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
std::vector< std::string > digits = 
{
    "ноль",
    "один",
    "два",
    "три",
    "четыре",
    "пять",
    "шесть",
    "семь",
    "восемь",
    "девять"
};
0
повар1
72 / 51 / 21
Регистрация: 24.02.2017
Сообщений: 212
Завершенные тесты: 1
22.06.2017, 08:34 #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
#include <iostream>
#include <string>
 
using namespace std;
 
int main()
{
    string digits[10] = { "zero", "one", "two", "three", "four",
                         "five", "six", "seven", "eight", "nine" };
    string str;
    int i=0,n;
    
    getline(cin, str);
    while(str[i]!='\0')
     {
        if (str[i]>='0' && str[i]<='9')
            {
             n=str[i]-'0';
            str.erase(i,1);
            str.insert(i,digits[n]);
            }
        i++;
     }
 
  cout <<str << endl;
 
  system(" pause >0");
 
    return 0;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.06.2017, 08:34
Привет! Вот еще темы с ответами:

Поменять каждую согласную русскую букву на цифру «8», а каждую гласную – на символ «–» - C++
Задание: Поменять каждую согласную русскую букву на цифру «8», а каждую гласную – на символ «–» #include &quot;stdafx.h&quot; #include &lt;stdio.h&gt; ...

Помощь в работе со строками (Дана строка. Заменить в ней каждую из групп, содержащих 3 или более одинаковых символов многоточием) - C++
Доброго времени суток. По заданию необходимо:Дана строка. Заменить в ней каждую из групп, содержащих 3 или более одинаковых символов...

Распечатать количество вхождений заданного слова в каждую строку и заменить его на другое заданное слово - C++
Даны две строки, содержащие не более 100 символов. Строки состоят из слов, разделенных пробелами. Распечатать количество вхождений...

Удалить группы пробелов, которыми начинается и заканчивается строка, а каждую внутреннюю группу пробелов заменить одним пробелом - C++
Задана строка символов. Преобразовать эту строку следующим образом: удалить группы пробелов, которыми начинается и заканчивается строка, а...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
22.06.2017, 08:34
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru