Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
2 / 2 / 3
Регистрация: 05.10.2014
Сообщений: 209

Есть ли в строке подряд идущая (повторяющаяся подряд) любая подстрока

14.12.2014, 23:19. Показов 2784. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
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
#include <stdio.h>
#include <string.h>
#include <cstdlib>
#include <iostream>
#include <ctype.h>
#include <ctime>
int main()
{
    int n,k;
    int i;
 
   char substrung[]="ab";
    char str1[100];
    printf("\n n-");
scanf("%d",&n);
str1[0]='a';
str1[1]='b';
str1[2]='a';
str1[3]='b';
str1[4]='a';
str1[5]='c';
char *p=strstr(str1,substrung);
p=strstr(p+1,substrung);
if(p!=NULL)
 printf( "yes\n");
 else printf("no\n");
 for (n=0;n<6;n++)
printf("% c",str1[n]);
getchar();
getchar();
 
}
эта программа ищет есть ли в строке подряд идущая(повторяющаяся подряд) подстрока "ab".
не знаю, как сделать так,чтобы каждый раз искалась не инициализированная строка(здесь "ab"),а различная, т.е. предположим я заполняю строку разными элементами,и каждый раз должно проверяться на разные последовательности(не должно быть два подряд идущих одинаковых элемента,не должно быть двух одинаковых подряд идущих пар,троек,четверок и т.д.) вот как это сделать?наверное придется создавать две динамические строки, для запоминания этих последовательностей,одну постоянно присваивать другой и проверять наличие таких последовательностей, и ее же после обнулять.Подскажите,как это реализовать?кому не жалко времени и нтересно
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.12.2014, 23:19
Ответы с готовыми решениями:

Вывести количество троек букв, которые идут подряд по возрастанию в латинском алфавите и идут подряд в данной строке
Вводится строка, состоящая из строчных букв латинского алфавита. Надо вывести количество троек букв, которые идут подряд по возрастанию в...

Определить, есть ли в заданной строке повторяющиеся подряд символы
Разработать программу, которая определяет, есть ли в заданной строке повторяющиеся подряд символы.

Верно ли, что в строке есть по крайней мере n подряд идущих букв a.
Дана строка и число n. Верно ли, что в ней есть по крайней мере n подряд идущих букв a.

21
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
15.12.2014, 15:19
Чем эта программа плоха? strstr() ищет любую подстроку, какую укажешь, а не только "ab".
0
2 / 2 / 3
Регистрация: 05.10.2014
Сообщений: 209
15.12.2014, 16:26  [ТС]
потому что я ее изначально инициализирую,а если например не буду.Предположим возьму и буду заполнять строку рандомными элементами,но каждый последующий элемент задавать на основе того, что он должен быть не равен предыдущему,пара в которой он идет не равна предыдущей,тройка,четверка и т.д.,вот так.я не спорю эта программа работает,но подстроку же мы инициализируем.а если рандомный ввод строки,то мы не будем знать есть ли у нас построка "ab"
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
15.12.2014, 19:04
Формулируй чётко задачу. Ты хочешь определить, есть ли вообще какие-то повторы в строке?
0
2 / 2 / 3
Регистрация: 05.10.2014
Сообщений: 209
15.12.2014, 23:06  [ТС]
я хочу определить есть ли в строке смежные подпоследовательности(т.е. чтобы рядом не стояли одинаковые элементы,рядом не стояли две двойки одинаковые,две тройки,две четверки)

Добавлено через 1 час 9 минут
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 <stdio.h>
#include <string.h>
#include <cstdlib>
#include <iostream>
#include <ctype.h>
#include <ctime>
int main()
{
    int n;
    
    char str1[100];
    char str2[100];
    char substrung1[10];
    char substrung2[10];
    char substrung3[10];
    int k,l,i,y;
   
 
printf("\n n-");
scanf("%d",&n);
srand (time(NULL));
str1[0]=rand()%3+97;
k=0;
l=0;
do
{
//str1[k+1]=rand()%3+97;
//substrung1[l]=str1[k];
//char *p=strstr(str1,substrung1);
//p=strstr(p+1,substrung1);
y=str1[k];
    //  if(p!=NULL)
      {
      if (y==97)
      {
      str1[k+1]=rand()%2+98;
      k++;
      }
      else 
      if (y==98)
      {
      str1[k+1]=2*(rand()%2)+97;
      k++;
      }
      else
      {
      str1[k+1]=rand()%2+97;
      k++;
      } 
      }
      }
      while (k<n);
 
 
k=0;
 for (k=0;k<n;k++)
printf("% c",str1[k]);
getchar();
getchar();
 
}
вот если так, то не будет рядом одинаковых идущих букв(по одной),но теперь надо выполнить задачу для подряд идущих двоек,троек,четверок и т.д.как не знаю
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
16.12.2014, 10:55
Так?
C++
1
2
3
4
5
6
7
8
9
10
11
12
char s[100];
bool f = true;
 
for (int i = 0; i < strlen(s) - 1; ++i)
    if (s[i] == s[i + 1])
    {
        f = false;
        break;
    }
 
if (f) // нет повторов
else // есть повторы
1
2 / 2 / 3
Регистрация: 05.10.2014
Сообщений: 209
16.12.2014, 22:57  [ТС]
эм...нет,с помощью функции strcmp сравнивать подпоследовательности
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
#include <stdio.h>
#include <string.h>
#include <cstdlib>
#include <iostream>
#include <ctype.h>
#include <ctime>
#include <cstring>
int main()
{
    int n;
    
    char str1[100];
    char str2[100];
    char substrung1[20];
    char substrung2[20];
    //char substrung3[10];
    int k,l,i,y,u,k1,k2,o1,o2,l2,m1,m2;
  int p;
 
printf("\n n-");
scanf("%d",&n);
srand (time(NULL));
str1[0]=rand()%3+97;
k=0;
u=0;
do
    {
      y=str1[k];
      {
      if (y==97)
      {
      str1[k+1]=rand()%2+98;
      k++;
      }
      else 
      if (y==98)
      {
      str1[k+1]=2*(rand()%2)+97;
      k++;
      }
      else
      {
      str1[k+1]=rand()%2+97;
      k++;
      } 
      }
      } 
      while (k<3);
      
      
  k1=0;
  k2=0;  
  
do
{   u=(k+1)/2;
    do
    {
      m1=k1;
      m2=k2;
      l=0;
      do
      { 
      substrung1[l]=str1[k1];
      l++;
      k1++;
      }
      while (k1<u);
      l2=0;
      do
      {
            substrung2[l2]=str1[k1];
            k1++;
            l2++;
            k2++;
            
        }
        while (k2<u);
              o1=str1[k1];
              o2=str1[k1-u];
              if ((strcmp(substrung1,substrung2))==0)
              if (o2==97)
      str1[k1]=rand()%2+98;
      else 
      if (o2==98)
      str1[k1]=2*(rand()%2)+97;
      else
      str1[k1]=rand()%2+97;
      u--;
      }
             while (u>1);
               m1++;
               m2++;
               k1=m1;
               k2=m2;
               k++;
}
      while (k<n);
 
 
 
 for (k=0;k<n;k++)
printf("% c",str1[k]);
getchar();
getchar();
 
}
вот здесь только до 4 элементов получилось заполнить, а дальше не знаю как дописать,не поможете?

Добавлено через 3 минуты
дальше возникают какие-то сбои, т.е. вообще может не заполнять
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
16.12.2014, 22:58
Повторяются только символы или наборы символов?
0
2 / 2 / 3
Регистрация: 05.10.2014
Сообщений: 209
16.12.2014, 23:04  [ТС]
дальше, они не то что не повторяются,а может просто пробел быть.
тут цикла не хватает ,только я запуталась капитально
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
16.12.2014, 23:09
Ну если ты запуталась, то я тем более не пойму, что нужно. Пример строки приведи, что ли.
0
2 / 2 / 3
Регистрация: 05.10.2014
Сообщений: 209
16.12.2014, 23:14  [ТС]
n=8 - acbc a
n=10 - cabc a (и курсор на 10 позиции остается) , т.е. элементы как бы отсутствуют
0
221 / 166 / 47
Регистрация: 17.07.2012
Сообщений: 587
16.12.2014, 23:18
Дарья1997, перебрать пару индексов i, j. пусть len = j - i + 1, тогда если s[i..j] == s[j + 1..j + len], то вот нашлась такая подряд идущая подстрока, в позициях [i, j] и [j + 1, j + (j - i + 1)];
0
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
16.12.2014, 23:19
Нет, я не про это. Пример входной строки и что ты хочешь получить.
0
2 / 2 / 3
Регистрация: 05.10.2014
Сообщений: 209
16.12.2014, 23:25  [ТС]
я ввожу просто число n, а мне должна вывестись последовательность из n элементов, в которой нет смежных подпоследовательностей и при этом эта последовательность должна формироваться только из 3 символов(например a,b,c)

Добавлено через 1 минуту
я вас не поняла,мне надо самой заполнить строку
0
221 / 166 / 47
Регистрация: 17.07.2012
Сообщений: 587
16.12.2014, 23:29
nmcf, оказалось, что задача в названии темы и задача, которую надо решить, различаются.
0
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
16.12.2014, 23:31
Цитата Сообщение от Дарья1997
Есть ли в строке подряд идущая (повторяющаяся подряд) любая подстрока
Suffix tree
0
2 / 2 / 3
Регистрация: 05.10.2014
Сообщений: 209
16.12.2014, 23:41  [ТС]
ну с суффиксным деревом мне вообще не разобраться
0
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
17.12.2014, 00:05
Цитата Сообщение от Дарья1997 Посмотреть сообщение
не разобраться
Гасфилд, Дэн "Строки, деревья и последовательности в алгоритмах"

Strmat

Strmat is a collection of C programs tied together with a simple menu system that implement a variety of string matching and pattern discovery algorithms. The emphasis is on exact matching methods, particularly ones based on the Z-algorithm, on the use of suffix trees, and the search for repeat patterns under several different definitions of repeats in strings. Strmat is under continuing development and we welcome inclusion of additional programs.
strings

Based on STRMAT 1.5 from Gusfield et al at UC Davis.
0
2 / 2 / 3
Регистрация: 05.10.2014
Сообщений: 209
17.12.2014, 00:31  [ТС]
а что-то сделать из того ,что я написала можно?
0
3176 / 1935 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
17.12.2014, 01:27
IMHO, нет. Любое не-Trie решение - уродливый костыль. Иными словами, нелепо строить систему префиксных кодов, не используя свойство префиксности. На trie вы получите решение (или узнаете об его отсутствии) просто обходом дерева.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.12.2014, 01:27
Помогаю со студенческими работами здесь

Определить, есть ли в строке подряд идущие пробелы, количество которых совпадает с введённым числом
Доброго времени суток! Подобные темы по поиску листал, ответ так и не смог найти. Есть программа, в которой пользователь вводит...

Разработать функцию, определяющую, есть ли в строке S как минимум 5 подряд идущих латинских букв
Разработать функцию Is5Latin(const S:string):boolean, определяющую, есть ли в строке S как минимум 5 подряд идущих латинских букв. С...

В символьной строке есть цепочки подряд идущих цифр. найдите наибольшее и наименьшее числа, составленные из этих цепочек.
Вот есть закая задача, помогите, пожайлуста! В символьной строке есть цепочки подряд идущих цифр. найдите наибольшее и наименьшее...

В символьной строке есть цепочки подряд идущих цифр. Найти наибольшее и наименьшее числа, составленные из этих цепочек
В символьной строке есть цепочки подряд идущих цифр. Найти наибольшее и наименьшее числа, составленные из этих цепочек.

Определить, верно ли, что в строке s есть 5 букв "е", которые идут подряд
Дано ряд символов S. Определить, верно ли, что в ряду s есть 5 букв е которые идут подряд


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru