Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
 
Дарья1997
2 / 2 / 0
Регистрация: 05.10.2014
Сообщений: 209
#1

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

14.12.2014, 23:19. Просмотров 625. Ответов 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 подряд идущих латинских букв - C++
Разработать функцию Is5Latin(const S:string):boolean, определяющую, есть ли в строке S как минимум 5 подряд идущих латинских букв. С...

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

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

Есть ли в числе шесть единиц подряд. - C++
Я нашёл бинарное число, но не могу узнать есть ли в нём 6 единиц подряд, используя циклы, оператор if, ничего более сложного... ПОМОГИТЕ...

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

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

21
nmcf
5756 / 5067 / 1734
Регистрация: 14.04.2014
Сообщений: 20,749
15.12.2014, 15:19 #2
Чем эта программа плоха? strstr() ищет любую подстроку, какую укажешь, а не только "ab".
0
Дарья1997
2 / 2 / 0
Регистрация: 05.10.2014
Сообщений: 209
15.12.2014, 16:26  [ТС] #3
потому что я ее изначально инициализирую,а если например не буду.Предположим возьму и буду заполнять строку рандомными элементами,но каждый последующий элемент задавать на основе того, что он должен быть не равен предыдущему,пара в которой он идет не равна предыдущей,тройка,четверка и т.д.,вот так.я не спорю эта программа работает,но подстроку же мы инициализируем.а если рандомный ввод строки,то мы не будем знать есть ли у нас построка "ab"
0
nmcf
5756 / 5067 / 1734
Регистрация: 14.04.2014
Сообщений: 20,749
15.12.2014, 19:04 #4
Формулируй чётко задачу. Ты хочешь определить, есть ли вообще какие-то повторы в строке?
0
Дарья1997
2 / 2 / 0
Регистрация: 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
5756 / 5067 / 1734
Регистрация: 14.04.2014
Сообщений: 20,749
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 / 0
Регистрация: 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
5756 / 5067 / 1734
Регистрация: 14.04.2014
Сообщений: 20,749
16.12.2014, 22:58 #8
Повторяются только символы или наборы символов?
0
Дарья1997
2 / 2 / 0
Регистрация: 05.10.2014
Сообщений: 209
16.12.2014, 23:04  [ТС] #9
дальше, они не то что не повторяются,а может просто пробел быть.
тут цикла не хватает ,только я запуталась капитально
0
nmcf
5756 / 5067 / 1734
Регистрация: 14.04.2014
Сообщений: 20,749
16.12.2014, 23:09 #10
Ну если ты запуталась, то я тем более не пойму, что нужно. Пример строки приведи, что ли.
0
Дарья1997
2 / 2 / 0
Регистрация: 05.10.2014
Сообщений: 209
16.12.2014, 23:14  [ТС] #11
n=8 - acbc a
n=10 - cabc a (и курсор на 10 позиции остается) , т.е. элементы как бы отсутствуют
0
SlavaSSU
216 / 161 / 45
Регистрация: 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
5756 / 5067 / 1734
Регистрация: 14.04.2014
Сообщений: 20,749
16.12.2014, 23:19 #13
Нет, я не про это. Пример входной строки и что ты хочешь получить.
0
Дарья1997
2 / 2 / 0
Регистрация: 05.10.2014
Сообщений: 209
16.12.2014, 23:25  [ТС] #14
я ввожу просто число n, а мне должна вывестись последовательность из n элементов, в которой нет смежных подпоследовательностей и при этом эта последовательность должна формироваться только из 3 символов(например a,b,c)

Добавлено через 1 минуту
я вас не поняла,мне надо самой заполнить строку
0
SlavaSSU
216 / 161 / 45
Регистрация: 17.07.2012
Сообщений: 587
16.12.2014, 23:29 #15
nmcf, оказалось, что задача в названии темы и задача, которую надо решить, различаются.
0
16.12.2014, 23:29
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.12.2014, 23:29
Привет! Вот еще темы с ответами:

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

Есть ли в одномерном массиве три подряд одинаковых элемента? - C++
Если в одномерном массиве есть три подряд идут одинаковых элемента, то переменной r присвоить значение истина.

определить есть ли в массиве последовательность из подряд идущих элементов - C++
Привет всем.Помогите пожалуйста решить задачу. Заранее спасибо. Дан массив из n элементов орпеделить есть ли в массиве...

Посчитать количество подряд идущих символов в каждой строке - C++
привет всем. очень нужна помощь. бо бьюсь об неё уже не один день. дело в следующим: есть файл в нём строки с числами как...


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

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

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