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

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

Войти
Регистрация
Восстановить пароль
 
Tachi
1 / 1 / 1
Регистрация: 24.10.2012
Сообщений: 72
#1

Определеить самую длинную последовательность в строке - C++

13.12.2012, 16:29. Просмотров 507. Ответов 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
31
32
33
34
35
#include <iostream>
using namespace std;
 
char c[10];
int i;
char b[10];
char a[10];
 
int main ()
{
for (i=0;i<10;i++)
{
    cin >> c[i];
}
for (i=0;i<10;i++)
{
    if (isalpha(c[i])==0 && isdigit(c[i])==0)
    cout << "character " << c[i] << " podhodit" << endl;
    else cout << "character " << c[i] << " ne podhodit" << endl;
}
int g=0;
for (i=0,g=0;i<10;i++)
{
     if (isalpha(c[i])==0 && isdigit(c[i])==0)
     {
         a[g]=c[i];
         g++;
     }
}
for (i=0;i<10;i++)
{
    cout << a[i];
}
 
}
Но тут проблема,если я ввожу например:
zxcASD!@#$

Мне программа выдаст:
!@#$

Но если введу например:
z?cASD!@#$

Мне программа выдаст:
?!@#$

Тобишь мне нужно както разделять эти последовательности между собой,и сравнивать их размер.
Помогите,как это сделать?

Например я ввожу:
123;;№%:fhgfdDFDFg^@%#%*gfj%%

Мне программа должна выдать:
^@%#%* (т.к. эта последовательность знаков является самой длинной в строке)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.12.2012, 16:29     Определеить самую длинную последовательность в строке
Посмотрите здесь:

подсчитать самую длинную последовательность подряд идущих букв а C++
C++ Определить самую длинную последовательность цифр в тексте
Подсчитать самую длинную последовательность подряд идущих букв а C++
C++ Найти в тексте самую длинную последовательность из одинаковых букв
В каждой строке текстового файла найти самую длинную последовательность цифр C++
Найти самую длинную неубывающую последовательность C++
Найти самую длинную последовательность простых чисел C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
sovaz1997
CEO SOVAZ Corp.
380 / 226 / 2
Регистрация: 17.12.2011
Сообщений: 819
Записей в блоге: 1
Завершенные тесты: 1
13.12.2012, 16:34     Определеить самую длинную последовательность в строке #2
Задай какой-то флаг, который скажет, был ли спец. символ до текущего)
Tachi
1 / 1 / 1
Регистрация: 24.10.2012
Сообщений: 72
13.12.2012, 16:42  [ТС]     Определеить самую длинную последовательность в строке #3
Не слишком чётко представляю как можно этот флаг сделать,и как его потом применять.
Afflicted
Обитатель форума
199 / 182 / 8
Регистрация: 28.10.2012
Сообщений: 542
13.12.2012, 17:39     Определеить самую длинную последовательность в строке #4
Ну у меня получилось примерно так:

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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include <iostream>
#include <sstream>
#include <ctype.h>
using namespace std;
 
int main ()
{
    char curr[10];
    bool b_Flag = false;
    int max = 0;
 
    ostringstream ostr;
 
    for (int i=0;i<10;i++)
        cin >> curr[i];
 
    for (int i=0;i<10;i++)
    {
        if (!isalpha(curr[i]) && !isdigit(curr[i]))
            cout << "character " << curr[i] << " podhodit" << endl;
        else
            cout << "character " << curr[i] << " ne podhodit" << endl;
    }
    
    for (int i=0; i<10; i++)
    {
        if (isalpha(curr[i]) || isdigit(curr[i]))
        {
            if (b_Flag)
            {
                b_Flag = false;
                ostr << "\n";
            }
        }
 
        if (!isalpha(curr[i]) && !isdigit(curr[i]))
        {
            b_Flag = true;
            ostr << curr[i];
        }
    }
 
    char *pch = strtok(const_cast<char*>(ostr.str().c_str()), "\n");
 
    while (pch != NULL)
    {
        if (max < strlen(pch))
        {
            max = strlen(pch);
            ostr.clear();
            ostr << pch;
        }
 
        pch = strtok(NULL, "\n");
    }
 
    cout << ostr.str() << " - max lenght" << endl;
 
    system("pause");
    return 0;
}
Tachi
1 / 1 / 1
Регистрация: 24.10.2012
Сообщений: 72
13.12.2012, 18:33  [ТС]     Определеить самую длинную последовательность в строке #5
Спасибо.А в чём компилировал? У меня codeblocks ругается, не хочет компилировать. И можно комменатрии добавить?

C запуском разобрался,нужно было подключить

#include <cstring>
#include <cstdlib>
sovaz1997
CEO SOVAZ Corp.
380 / 226 / 2
Регистрация: 17.12.2011
Сообщений: 819
Записей в блоге: 1
Завершенные тесты: 1
13.12.2012, 18:35     Определеить самую длинную последовательность в строке #6
Для Code::Blocks:

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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <iostream>
#include <sstream>
#include <ctype.h>
#include <string.h>
using namespace std;
 
int main ()
{
    char curr[10];
    bool b_Flag = false;
    int max = 0;
 
    ostringstream ostr;
 
    for (int i=0;i<10;i++)
        cin >> curr[i];
 
    for (int i=0;i<10;i++)
    {
        if (!isalpha(curr[i]) && !isdigit(curr[i]))
            cout << "character " << curr[i] << " podhodit" << endl;
        else
            cout << "character " << curr[i] << " ne podhodit" << endl;
    }
 
    for (int i=0; i<10; i++)
    {
        if (isalpha(curr[i]) || isdigit(curr[i]))
        {
            if (b_Flag)
            {
                b_Flag = false;
                ostr << "\n";
            }
        }
 
        if (!isalpha(curr[i]) && !isdigit(curr[i]))
        {
            b_Flag = true;
            ostr << curr[i];
        }
    }
 
    char *pch = strtok(const_cast<char*>(ostr.str().c_str()), "\n");
 
    while (pch != NULL)
    {
        if (max < strlen(pch))
        {
            max = strlen(pch);
            ostr.clear();
            ostr << pch;
        }
 
        pch = strtok(NULL, "\n");
    }
 
    cout << ostr.str() << " - max lenght" << endl;
 
    cin.get();
    return 0;
}
Tachi
1 / 1 / 1
Регистрация: 24.10.2012
Сообщений: 72
13.12.2012, 18:39  [ТС]     Определеить самую длинную последовательность в строке #7
Что в данном случае делает строчка

char *pch = strtok(const_cast<char*>(ostr.str().c_str()), "\n"); //?

И что означает

strtok //?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.12.2012, 18:43     Определеить самую длинную последовательность в строке
Еще ссылки по теме:

Найти самую длинную последовательность цифр в строке C++
C++ Найти в массиве самую длинную убывающую последовательность
Найти самую длинную монотонную последовательность C++
C++ В массиве найти самую длинную монотонную последовательность
Найти в массиве самую длинную положительную последовательность C++

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

Или воспользуйтесь поиском по форуму:
Afflicted
Обитатель форума
199 / 182 / 8
Регистрация: 28.10.2012
Сообщений: 542
13.12.2012, 18:43     Определеить самую длинную последовательность в строке #8
MVS 10.
Сначала все, как в вашем коде. Если это знак, то вношу его в строку и выставляю активным флаг. Если цепочка знаков прекращается и дальше идут цифры, буквы и пр, то флаг я обратно возвращаю на ложный и ставлю в конец строки со знаками \n.
Потом разбиваю получившуюся строку на несколько, отделенных \n и считаю количество символов в ней. После чего вывожу ту, где кол-во символов больше всех.

Добавлено через 1 минуту
Tachi, strtok - разбитие строки по подстрокам, отделенных символом. В данном случае, \n

Добавлено через 33 секунды
const_cast<char*>(ostr.str().c_str()) - снятие константы и перевод в тип char
Yandex
Объявления
13.12.2012, 18:43     Определеить самую длинную последовательность в строке
Ответ Создать тему
Опции темы

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