Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Дарья1997
2 / 2 / 3
Регистрация: 05.10.2014
Сообщений: 209
#1

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

14.12.2014, 23:19. Просмотров 656. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.12.2014, 23:19
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Есть ли в строке подряд идущая (повторяющаяся подряд) любая подстрока (C++):

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

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

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

В заданной строке определить количество слов (в строке может содержаться несколько пробелов подряд).
В заданной строке определить количество слов (в строке может содержаться...

Есть ли в числе шесть единиц подряд.
Я нашёл бинарное число, но не могу узнать есть ли в нём 6 единиц подряд,...

Заменить в строке пробелы идущие подряд
В заданной строке,заменить парное количество пробелов,которые идут подряд на...

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

Добавлено через 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
nmcf
6243 / 5555 / 2526
Регистрация: 14.04.2014
Сообщений: 23,356
16.12.2014, 10:55 #6
Так?
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
Дарья1997
2 / 2 / 3
Регистрация: 05.10.2014
Сообщений: 209
16.12.2014, 22:57  [ТС] #7
эм...нет,с помощью функции 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
nmcf
6243 / 5555 / 2526
Регистрация: 14.04.2014
Сообщений: 23,356
16.12.2014, 22:58 #8
Повторяются только символы или наборы символов?
0
Дарья1997
2 / 2 / 3
Регистрация: 05.10.2014
Сообщений: 209
16.12.2014, 23:04  [ТС] #9
дальше, они не то что не повторяются,а может просто пробел быть.
тут цикла не хватает ,только я запуталась капитально
0
nmcf
6243 / 5555 / 2526
Регистрация: 14.04.2014
Сообщений: 23,356
16.12.2014, 23:09 #10
Ну если ты запуталась, то я тем более не пойму, что нужно. Пример строки приведи, что ли.
0
Дарья1997
2 / 2 / 3
Регистрация: 05.10.2014
Сообщений: 209
16.12.2014, 23:14  [ТС] #11
n=8 - acbc a
n=10 - cabc a (и курсор на 10 позиции остается) , т.е. элементы как бы отсутствуют
0
SlavaSSU
217 / 162 / 47
Регистрация: 17.07.2012
Сообщений: 587
16.12.2014, 23:18 #12
Дарья1997, перебрать пару индексов i, j. пусть len = j - i + 1, тогда если s[i..j] == s[j + 1..j + len], то вот нашлась такая подряд идущая подстрока, в позициях [i, j] и [j + 1, j + (j - i + 1)];
0
nmcf
6243 / 5555 / 2526
Регистрация: 14.04.2014
Сообщений: 23,356
16.12.2014, 23:19 #13
Нет, я не про это. Пример входной строки и что ты хочешь получить.
0
Дарья1997
2 / 2 / 3
Регистрация: 05.10.2014
Сообщений: 209
16.12.2014, 23:25  [ТС] #14
я ввожу просто число n, а мне должна вывестись последовательность из n элементов, в которой нет смежных подпоследовательностей и при этом эта последовательность должна формироваться только из 3 символов(например a,b,c)

Добавлено через 1 минуту
я вас не поняла,мне надо самой заполнить строку
0
SlavaSSU
217 / 162 / 47
Регистрация: 17.07.2012
Сообщений: 587
16.12.2014, 23:29 #15
nmcf, оказалось, что задача в названии темы и задача, которую надо решить, различаются.
0
gazlan
3139 / 1915 / 311
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
16.12.2014, 23:31 #16
Цитата Сообщение от Дарья1997
Есть ли в строке подряд идущая (повторяющаяся подряд) любая подстрока
Suffix tree
0
Дарья1997
2 / 2 / 3
Регистрация: 05.10.2014
Сообщений: 209
16.12.2014, 23:41  [ТС] #17
ну с суффиксным деревом мне вообще не разобраться
0
gazlan
3139 / 1915 / 311
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
17.12.2014, 00:05 #18
Цитата Сообщение от Дарья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
Дарья1997
2 / 2 / 3
Регистрация: 05.10.2014
Сообщений: 209
17.12.2014, 00:31  [ТС] #19
а что-то сделать из того ,что я написала можно?
0
gazlan
3139 / 1915 / 311
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
17.12.2014, 01:27 #20
IMHO, нет. Любое не-Trie решение - уродливый костыль. Иными словами, нелепо строить систему префиксных кодов, не используя свойство префиксности. На trie вы получите решение (или узнаете об его отсутствии) просто обходом дерева.
0
17.12.2014, 01:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.12.2014, 01:27
Привет! Вот еще темы с решениями:

Есть ли во введенном числе одинаковые цифры подряд?
Проверить, есть ли во введенном числе одинаковые цифры подряд.

Заменить в строке две подряд буквы 'a' на одну
Здравствуйте! К слову проблема такая, решил заняться программированием,...

Как выделить в строке 4 подряд идущие гласные?
Доброго всем здравия, духовного и телесного. Делаю жалкие попытки написать...

Определить, имеется ли в строке три цифры подряд
Определить, имеется ли в строке три цифры подряд.


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

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