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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
sergeevichvn
0 / 0 / 0
Регистрация: 02.02.2014
Сообщений: 8
#1

Найти в строке два одинаковых фрагмента длиной более 5 символов и возвратить индекс начала первого из них - C++

02.02.2014, 21:31. Просмотров 1564. Ответов 18
Метки нет (Все метки)

Всем добрый вечер.
Собственно нужна ваша помощь, есть условие:
"Найти в строке два одинаковых фрагмента (не включающих в себя пробелы) длиной более 5 символов и возвратить индекс начала первого из них (т.е. для “aaaaaabcdefgxxxxxxbcdefgwwwww” вернуть n=6 - индекс начала “bcdefg”)."
Кто может помочь с решением задачи, написанием кода? Ну или хотя бы доходчиво объяснить, что от меня требуется, как должна работать программа?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.02.2014, 21:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Найти в строке два одинаковых фрагмента длиной более 5 символов и возвратить индекс начала первого из них (C++):

Найти в строке два одинаковых фрагмента (не включая пробелы) длиной более 5 символов - C++
Привет всем вопрос состоит:Найти в строке два одинаковых фрагмента (не включая пробелы) длиной более 5 символов. Что то не могу сообразить...

Текст, состоящий не более чем из 255 символов, разбить на строки длиной не более 50 символов в строке - C++
Текст, состоящий не более чем из 255 символов, разбейте на строки длиной не более 50 символов в строке. Переносите только на месте...

Найти слово, начинающееся с самой младшей латинской буквы и возвратить индекс его начала - C++
Дана строка, содержащая некоторый текст (включая пробелы и знаки препинания). Под словом понимается набор символов, не содержащий пробелов...

Дана строка длиной не более 80 символов, оканчивающаяся точкой. Подчеркнуть все гласные буквы в строке - C++
Дана строка длиной не более 80 символов, оканчивающаяся точкой. Подчеркнуть все гласные буквы в строке.

В каждой строке найти минимальный элемент, затем среди них найти максимальное и вывести на экран индекс этого элемента - C++
Здравствуйте! Помогите, пожалуйста, с задачей: В двумерном массиве все числа различны. В каждой строке найти минимальный элемент, затем...

среди чисел k,l,r два одинаковых,а в третье отлично от них.Переменной n присвоить значение числа,отличного от двух одинаковых - C++
среди чисел k,l,r два одинаковых,а в третье отлично от них.Переменной n присвоить значение числа,отличного от двух одинаковых

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
zss
Модератор
Эксперт С++
6382 / 5947 / 1927
Регистрация: 18.12.2011
Сообщений: 15,264
Завершенные тесты: 1
02.02.2014, 21:44 #2
C
1
2
3
4
5
6
7
8
9
10
11
#include <string.h>
#include <stdio.h>
int main()
{
    char str[]=“aaaaaabcdefgxxxxxxbcdefgwwwww” ;
    char srs[]=“bcdefg”;
    int pos;
    pos=strstr(str,src);
    printf("позиция фрагмента %s =%d",srs,pos);
    retun 0;
}
1
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6471 / 3119 / 306
Регистрация: 04.12.2011
Сообщений: 8,594
Записей в блоге: 4
03.02.2014, 00:59 #3
sergeevichvn, могут ли перекрываться фрагменты:
"тратратр" ?
0
Fene4ka_
91 / 91 / 16
Регистрация: 24.01.2014
Сообщений: 1,215
03.02.2014, 02:01 #4
zss, строка должна быть любой, в вашем же случае такое работать не будет
0
zss
Модератор
Эксперт С++
6382 / 5947 / 1927
Регистрация: 18.12.2011
Сообщений: 15,264
Завершенные тесты: 1
03.02.2014, 13:37 #5
Цитата Сообщение от Fene4ka_ Посмотреть сообщение
строка должна быть любой
Так добавьте команду ввода строки
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <string.h>
#include <stdio.h>
int main()
{
    int pos;
    char str[100];
    char srs[50];
    puts("Где ищем:");
    gets(str);
    puts("Что ищем:");
    gets(srs);
    pos=strstr(str,src);
    printf("позиция фрагмента %s =%d",srs,pos);
    retun 0;
}
0
Fene4ka_
91 / 91 / 16
Регистрация: 24.01.2014
Сообщений: 1,215
03.02.2014, 16:51 #6
zss, также на сколько я понимаю, мы не должны вводить, что ищем, а оно должно само найти, что ищем ...
1
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6471 / 3119 / 306
Регистрация: 04.12.2011
Сообщений: 8,594
Записей в блоге: 4
03.02.2014, 16:54 #7
Цитата Сообщение от Fene4ka_ Посмотреть сообщение
zss, также на сколько я понимаю, мы не должны вводить, что ищем, а оно должно само найти, что ищем ...
Так функцию же показали. А из строки ввести разве сложнее чем с консоли? Вот тут много лишнего, но как рабочий вариант (не проверял дотошно ) :
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
#include <iostream>
#include <string.h>
#include <stdio.h>
using namespace std;
 
int main()
{
char sourcestr[]="olo lol tratratrumbumbumubumbum bum bum bum";
const size_t size_compiring_str = 5;
char compiring_str[size_compiring_str+1]={0};
 
size_t pos_cmp=0;
size_t pos_fnd=pos_cmp+1;
char *find_pos=0;
char *rezult_pos=0;
size_t size_sourcestr = sizeof(sourcestr)/sizeof(char);
while(pos_cmp < size_sourcestr){
while(pos_fnd < size_sourcestr){
find_pos=0;
rezult_pos=0;
strncpy(compiring_str, &sourcestr[pos_cmp], size_compiring_str); 
if((find_pos = strstr(&sourcestr[pos_fnd], compiring_str))!=0){
rezult_pos=&sourcestr[pos_cmp]; 
    break;
}
pos_fnd++;
}
if(find_pos!=0){
    break;
}
pos_cmp++;
pos_fnd=pos_cmp+1;
}
if(find_pos){
cout<<"the first entry is "<<rezult_pos<<" at pos "<<pos_cmp<<" in "<<sourcestr<<endl;
cout<<"and the substring is "<< find_pos;
}
else
cout<<"position is not found";
 
cout<<endl;
system("pause");
return 0;
}
Если перекрываться могут, но ТС молчит, как партизан.
0
zss
Модератор
Эксперт С++
6382 / 5947 / 1927
Регистрация: 18.12.2011
Сообщений: 15,264
Завершенные тесты: 1
03.02.2014, 17:16 #8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <string.h>
#include <stdio.h>
int main()
{
    int L;
    char str[100];
    char srs[7],*pos;
    puts("Где ищем:");
    gets(str);
    L=strlen(str);
    for(int i=6;i<L-6;i++)
    {
        strncpy(srs,str+i-6,6); // берем очередные 6 символов из строки
        srs[6]=0;
        pos=strstr(str+i,srs); // ищем после последнего взятого символа
        if(pos!=NULL)
           printf("позиция второго фрагмента %s =%d",srs,(int)(pos-str));
    }
    return 0;
}
1
sergeevichvn
0 / 0 / 0
Регистрация: 02.02.2014
Сообщений: 8
03.02.2014, 23:51  [ТС] #9
Я так понимаю, мы с клавиатуры вводим строку, в этой строке нужно найти два одинаковых фрагмента из 5 символов, в переменную возвращается индекс, после которого начинается этот фрагмент.

Что значит перекрываются?
0
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6471 / 3119 / 306
Регистрация: 04.12.2011
Сообщений: 8,594
Записей в блоге: 4
04.02.2014, 01:37 #10
Цитата Сообщение от sergeevichvn Посмотреть сообщение
Что значит перекрываются?
То есть буквально. Но не абсолютно. Я же пример в вопросе привёл и в коде тоже два фрагмента перекрываются. Первый содержит несколько символов следующего:
tratratr
tratr это фрагмент, а перекрываются они по tr.
Поскольку Вы не оговорили этот момент, то следует полагать, что перекрываться они могут. Но в задании, возможно, это оговорено, поэтому я и спрашивал. Впрочем, для случая неперекрывающихся фрагментов переделать пара пустяков. Сдвигать в первой итерации не на 1, а на 5.
0
sergeevichvn
0 / 0 / 0
Регистрация: 02.02.2014
Сообщений: 8
04.02.2014, 02:32  [ТС] #11
Задание скопировано, это все условие, которое давалось.
То что написали Вы, кажется не совсем то, если я покажу такой код препод офигеет. Мы азы только прошли
0
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6471 / 3119 / 306
Регистрация: 04.12.2011
Сообщений: 8,594
Записей в блоге: 4
04.02.2014, 02:43 #12
Цитата Сообщение от sergeevichvn Посмотреть сообщение
Задание скопировано, это все условие, которое давалось.
То что написали Вы, кажется не совсем то, если я покажу такой код препод офигеет. Мы азы только прошли
Значит могут перекрываться. Что касается кода, то чем он короче, тем красивее и лучше, обычно. Такой код, который предложил zss, новичёк конечно может написать. Но это либо случайно или очень талантливый новичёк (имхо).
А что касается:
Цитата Сообщение от sergeevichvn Посмотреть сообщение
препод офигеет.
то это же его работа.
Главное, что бы Вы понимали, что происходит и почему, и разобравшись смогли написать что-то осмысленное(имхо).
0
sergeevichvn
0 / 0 / 0
Регистрация: 02.02.2014
Сообщений: 8
04.02.2014, 03:00  [ТС] #13
Цитата Сообщение от IGPIGP Посмотреть сообщение
Главное, что бы Вы понимали, что происходит и почему, и разобравшись смогли написать что-то осмысленное(имхо).
#include <string.h> // Подключаем библиотеки
#include <stdio.h> // Подключаем библиотеки
int main()
{
int L; // Объявляем переменную L типа integeer
char str[100]; //создаем массив символьного типа
char srs[7],*pos; //создаем массив символьного типа, + переменную pos (НЕ понятно, что значит звездочка)
puts("Где ищем:"); //вывод строки на экран, наверное лучше printf
gets(str); // получаем строку с клавиатуры и записываем в массив str
L=strlen(str); //присваиваем переменной l значение длинны введенной строки
for(int i=6;i<L-6;i++) // цикл выполняется пока i меньше длина строки-6 симвоолов
{
strncOpy(srs,str+i-6,6); // берем очередные 6 символов из строки // тут не совсем понятно, что в скобках
srs[6]=0; // присваиваем 6 элементу массива 0?
pos=strstr(str+i,srs); // ищем после последнего взятого символа //что значит strstr, почему два раза и что в скобках?
if(pos!=NULL) // условие, если переменная пос не равна 0, выводим на экран
printf("позиция второго фрагмента %s =%d",srs,(int)(pos-str));
}
return 0;
}
0
Fene4ka_
91 / 91 / 16
Регистрация: 24.01.2014
Сообщений: 1,215
04.02.2014, 03:10 #14
sergeevichvn, а в теги С++ не судьба была вставить ?
0
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6471 / 3119 / 306
Регистрация: 04.12.2011
Сообщений: 8,594
Записей в блоге: 4
04.02.2014, 03:29 #15
sergeevichvn, в левом верхнем углу окна редактора сообщений, средняя строка линейки начинается символом С++. Ткнув его вы получите в окне пару тегов (открывающий/закрывающий) форматирования кода:
[CPP][/CPP]. Поставив курсор между ними и скопировав код, Вы сможете представить его, так:
C++
1
int *a;
звёздочка это символ, специфицирующий объявляемый тип, как указатель в данном объявлении. В выражениях это может быть знак операции умножения или разадресации.
O в strncpy, действительно не нужно, но Вам же показывают идею, а не дают, непременно, работающий код. Отвечающий может не располагать временем, например. Помощь ведь не в том, чтобы сделать за Вас работу, а в том, чтобы помочь Вам её сделать.
И ещё о окне форума и его фичах. Внизу под каждым постом, есть кнопка "спасибо". Это не обязательная процедура, но обычно ею пользуются. Чтобы потренироваться, нажмите здесь:
Найти в строке два одинаковых фрагмента длиной более 5 символов и возвратить индекс начала первого из них
демонстрируя признательность автору поста. Это будет, просто, нормально.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.02.2014, 03:29
Привет! Вот еще темы с ответами:

10.31. Даны два предложения, в которых имеются буквы ш. Найти, в каком из них эга буква имеет больший порядковый номер (при счете от начала предложени - C++
10.31. Даны два предложения, в которых имеются буквы ш. Найти, в каком из них эга буква имеет больший порядковый номер (при счете от начала...

Найти координаты первого вхождения в заданную строку подстроки, состоящей из двух одинаковых заданных символов - C++
Найти координаты первого вхождения в заданную строку подстроки, состоящей из двух одинаковых заданных символов. Помогииииите

Разбить файл на строки длиной не более 60 символов - C++
Проблема в том, что функция, работает не корректно... А вот понять в чем проблема я чет не могу... (Хотя есть ощущение, что функция...

В квадратной матрице найти номер первого отрицательного элемента в строке и составить из них массив. - C++
Помогите плз. Никак соображу как сделать лабу. Дан массив размером nxn, элементы которого целые числа. Для каждой строки найти номер...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
04.02.2014, 03:29
Ответ Создать тему
Опции темы

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