Работа со строками. Значение индекса начала повторяющегося фрагмента символов

Страницы работы

Содержание работы

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

Федеральное агентство по образованию 

НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ

 ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

Учебный Центр Информационных Технологий «Информатика»

Лабораторная работа № 3

по дисциплине «Информатика и программирование ч.1»

Направление подготовки:  230105 - «Программное обеспечение вычислительной техники и автоматизированных систем»

Выполнил слушатель:

Вариант: № 9

Дата сдачи: __/__/____

Преподаватель:

Новосибирск, 2016г.


1.  Цель.

Научиться работать со строками.

2.  Вариант задания№9.

Найти в строке два одинаковых фрагмента длиной более 5 символов (не включая пробелы) и возвратить индекс начала первого из них (т.е. для “aaaaaabcdefgxxxxxxbcdefgwwwww” вернуть n=6 – индекс начала “bcdefg”).

3.  Анализ задачи и алгоритм.

1)  Анализ задачи

Входные данные: массив – строка символов.

Результат: значение индекса начала повторяющегося фрагмента символов.

Метод решения: в дополнительный массив сохраняем первые 6 символов исходного массива, проверяя при этом отсутствие символа пробела, и сохраняем значение индекса первого символа, взятого из исходного массива. Проверяем условие совпадения всех символов дополнительного массива с символами очередного фрагмента исходного массива. При выполнении данного условия выводим на экран фрагмент и предварительно сохранённый индекс. Если условие не выполнено, то производим сдвиг на один символ от начала строки.

2)  Алгоритм решения задачи

·  копирование первых шести символов исходного массива в дополнительный, проверяя при этом, что очередной символ не является пробелом;

·  поиск фрагмента исходного массива, все символы которого совпадают со всеми символами дополнительного массива, сохранение индекса начала этого фрагмента;

·  вывод фрагмента строки и его индекса.

4.  Описание программной реализации.

Используемые переменные

str[] – исходная строка символов, тип char;

podstr[] – строка-шаблон, тип char.

Используемые функции

voidfill(str, podstr, k) – заполнение массива символов podstr[] элементами из массива str[], начиная с индекса k;

voidfind(str, podstr, k) – поиск в массиве str[] фрагмента совпадающего с содержимым массива podstr[]; поиск начинается с текущего индекса k, который и выводится при совпадении.

5.  Пример работы программы.

6.  Вывод.

В ходе выполнения лабораторной работы я ознакомился с основами работы со строками. Освоил поиск одинаковых фрагментов строк.

7.  Текст программы.

#include <stdlib.h>

#include <stdio.h>

#include <conio.h>

void fill(char*, char*, int);                                        // заполнение массива символов podstr[]

void find(char*, char*, int);                                      // поиск в массиве str[]

int main()

{

char str[80] = "aaafgbcdxx xxaabafgbcdefgxxxxaabaa bcxxxfbcdefgwwwwww"; // исходная строкa

printf("YOUR STRING:\n%s\n", str);

char podstr[7]="      ";                                          // дополнительный массив

for (int k = 0; str[k] != '\0'; k++)                          // проходим по всей строке

{

fill(str, podstr, k);

find(str, podstr, k);

}

printf("\nNO MORE REPEAT\n");

_getch();

return 0;

}

void fill(char* str, char* podstr, int k)

{

for (int i = k, j = 0; j<6; i++, j++)                        // заполнение дополнительного массива

{

if (str[i]==' ') break;                                       // при обнаружении пробела выходим из цикла

podstr[j] = str[i];                                           

}

}

void find(char* str, char* podstr, int k)                    // поиск совпадающего фрагмента

{

for (int i = k + 6; str[i] != '\0'; i++)

{

if (podstr[0] == str[i] && podstr[1] == str[i + 1] && podstr[2] == str[i + 2] && podstr[3] == str[i + 3] && podstr[4] == str[i + 4] && podstr[5] == str[i + 5])

{

printf("\nREPEAT INDEX: %d\nCONTENT MATCHED FRAGMENT:\t%s\n\nPUSH TO FIND NEXT\n", k, podstr);

_getch();

}

}

}

8.  Дополнительные вопросы.

Похожие материалы

Информация о работе