Составить и настроить программу, формирующую результирующую строку, содержащую все последовательности цифр максимальной длины в предложении
дорогие друзья. Помогите написать программу на С++ ибо вы - моя последняя надежда. Нужно выбрать из строки char максимальные последовательности цифр. Например для текста: "11 cars in the garage, 11 cars. Take 1 down to drive, 10 cars in the garage. 10 cars in the garage, 10 cars. Take 1 down to drive, 9 cars in the garage. 9 cars in the garage, 9 cars." должна быть сформирована строка "11 11 10 10 10". При выполнении этой задачи можно использовать стандартные функции обработки строк strcat, strspn, strcspn и т.п
Вот мой код:
#include <iostream>
using namespace std;
int main()
{
char s1[256] = "11 cars in the garage, 11 cars. Take 1 down to drive, 10 cars in the garage. 10 cars in the garage, 10 cars. Take 1 down to drive, 9 cars in the garage. 9 cars in the garage, 9 cars.";
cout << "Input string: " << s1 << endl;
for (int i = 0; i < strlen(s1); i++)
{
if (isdigit(s1[i]))
{
char temp[2] = { s1[i] };
cout << atoi(temp) << " ";
}
}
return 0;
}
Но он только выбирает в выводит цифры, а мне нужно максимальные последовательности. Буду очень благодарен кто поможет мне).
Ответы (1 шт):
Если с использованием словаря из стандартной библиотеки, то как-то так:
#include <iostream>
#include <cstring>
#include <stdio.h>
#include <map>
using namespace std;
int main()
{
char s1[256] = "11 cars in the garage, 11 cars. Take 1 down to drive, 10 cars in the garage. 10 cars in the garage, 10 cars. Take 1 down to drive, 9 cars in the garage. 9 cars in the garage, 9 cars.";
cout << "Input string: " << s1 << endl;
map< int, int> counters;
char * pch;
pch = strtok (s1, " ,.!?"); // получаем лексему из строки
while (pch != NULL) // пока строка не закончится
{
if(isdigit(*pch)) // если первый символ - цифра
{
int i = atoi(pch); // переводим лексему (подстроку) в целое число
counters[i]++; // если элемента нет - добавляем его и увеличиваем счетчик
}
pch = strtok (NULL, " ,.!?"); // получаем следующую лексему из строки
}
for(auto c : counters) // просто выводим наши подсчеты
{
cout << c.first << " " << c.second << "\n";
}
return 0;
}
В последнем цикле выводится количество чисел на экран, что легко преобразовать в поиск максимума и вывод числа нужное количество раз.