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

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

Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.

Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.

Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.

Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.

Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.

Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.

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

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

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

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

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

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

Лабораторная работа № 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.  Дополнительные вопросы.

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

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

Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.

Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.

Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.

Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.

Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.

Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.