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

Найти самую длинную группу цифр (нужно исправить) - C++

Восстановить пароль Регистрация
 
fr0st1k123
0 / 0 / 0
Регистрация: 28.09.2015
Сообщений: 46
07.03.2016, 18:15     Найти самую длинную группу цифр (нужно исправить) #1
Дан текст, каждый символ которого может быть малой буквой, цифрой или одним из знаков +, -, *. Группой букв будем называть такую совокупность последовательно расположенных букв, которой непосредственно не предшествует и за которой непосредственно не следует буква. Аналогично определим группу цифр и группу знаков.

Найти самую длинную группу цифр. Если эту наибольшую длину имеет несколько групп, то взять самую последнюю.
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 "stdafx.h"
#include <iostream>
#include <cstring>
using namespace std;
 
int main()
{
    char *s;
    s = new char[100];
    cin >> s;
    int k = 0, n = 0;
    for (int i = 0; i<strlen(s); i++)
    {
        if (n<k) n = k;
        if (isdigit(s[i])) k = k + 1;
        else k = 0;
    }
    int a;
    for (int i = strlen(s); i >= 1; i--)
    {
        if (k == n) a = i + 1;
        if (isdigit(s[i])) k = k + 1;
        else k = 0;
    }
    for (int i = a; i<a + n; i++)
    {
        cout << s[i];
    }
    return 0;
}
нужно исправить , чтобы выводил последнюю группу цифр
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.03.2016, 18:15     Найти самую длинную группу цифр (нужно исправить)
Посмотрите здесь:

Найти самую длинную строку в файле C++
C++ Определить самую длинную последовательность цифр в тексте
C++ Определить самую длинную и самую короткую из введенных строк
Найти самую длинную строку в файле C++
Найти самую длинную группу цифр и поменять её с последней группой цифр C++
В данном массиве найти самую длинную группу из записанных подряд элементоводного знака C++
Дана строка. Удалить из нее самую длинную подстроку, что состоит из цифр C++
В каждой строке текстового файла найти самую длинную последовательность цифр C++
Найти самую длинную неубывающую последовательность C++
C++ Найти самую длинную ленту
Найти самую длинную последовательность цифр в строке C++
Найти самую длинную монотонную последовательность C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Igrich
4 / 4 / 7
Регистрация: 07.03.2016
Сообщений: 44
07.03.2016, 19:14     Найти самую длинную группу цифр (нужно исправить) #2
Не понял зачем два раза пробегать по массиву(в начала и с конца),по моему проще сделать таким образом:
Пробегаем с первого до последнего, n - текущий размер, tmp - размер самой большой группы, max - номер элемента массива, с которого начинается самый большой последний блок цифр.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int main(){
    char *s;
    s = new char[100];
    cin >> s;
    int max=-1, tmp = 0, n = 0;
    for (int i = 0; i<=strlen(s); i++)
    {
        if (isdigit(s[i])){
            n++;
            continue;
        }
        if(n<tmp){
            n=0;
            continue;
        }
        tmp=n;
        n=0;
        max=i-tmp;
    }
    for (int i = max; i<max+tmp; i++)
        cout << s[i];
}
fr0st1k123
0 / 0 / 0
Регистрация: 28.09.2015
Сообщений: 46
10.03.2016, 18:13  [ТС]     Найти самую длинную группу цифр (нужно исправить) #3
Цитата Сообщение от Igrich Посмотреть сообщение
Не понял зачем два раза пробегать по массиву(в начала и с конца),по моему проще сделать таким образом:
Пробегаем с первого до последнего, n - текущий размер, tmp - размер самой большой группы, max - номер элемента массива, с которого начинается самый большой последний блок цифр.
объясните , что делают эти 2 цикла
C++ (Qt)
1
2
3
4
5
6
for (int i = 0; i<=strlen(s); i++)
    {
        if (isdigit(s[i])){
            n++;
            continue;
        }
и
C++ (Qt)
1
2
3
if(n<tmp){
            n=0;
            continue;
skales007
16 / 16 / 4
Регистрация: 09.07.2015
Сообщений: 87
Записей в блоге: 2
10.03.2016, 18:48     Найти самую длинную группу цифр (нужно исправить) #4
fr0st1k123,
C++
1
2
3
4
5
6
for (int i = 0; i<=strlen(s); i++)
{
    if (isdigit(s[i])){
        n++;
        continue;
}
если текущий элемент массива - цифра, обновляет счетчик группы цифр, затем пропускает оставшуюся часть цикла, для проверки следующего элемента.

C++
1
2
3
if(n<tmp){
    n=0;
    continue;
если длина текущей группы цифр меньше предыдущей группы, сбрасывает счетчик длины группы и, тоже пропускает оставщуюся часть цикла для проверки следующего элемента
Yandex
Объявления
10.03.2016, 18:48     Найти самую длинную группу цифр (нужно исправить)
Ответ Создать тему
Опции темы

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