75662

Операції над стрічками

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

Информатика, кибернетика и программирование

Визначення позиції початку в стрічці s слова з номером n. Потім вводиться ціле число – номер слова у рядку що буде перевірятись. Далі у циклі шукається позиція слова під введеним номером. За умовами необхідно врахувати усі символироздільники що розташовані між словами наприклад кома і пробіл крапка і пробіл два пробіли тощо.

Украинкский

2015-01-24

170.05 KB

1 чел.

Міністерство  освіти  і  науки України

Вінницький національний технічний університет

Інститут інформаційних технологій та комп’ютерної інженерії

Кафедра ПЗ

Лабораторна робота №2 варіант №9

з дисципліни Алгоритми та структури даних

Виконала: ст. гр. 1 ПІ-13б                            Лілик Л. С.

Перевірив:                                                       Власюк В. Х.

Вінниця, 2013

Тема: операції над стрічками.

Мета: набуття практичних навичок застосування операцій над стрічками.

Завдання:

Розробити процедури та функції які забезпечують виконання операції вказаних в завданні. В контрольному прикладі передбачити всі можливі комбінації вхідних параметрів (нульова довжина, вихід за межі стрічки і т.п.), в тому числі і неправильні.

Варіант № 9.

Визначення позиції початку в стрічці s слова з номером n.

Хід роботи

Програма починається з того, що користувач вводить бажаний рядок будь-якого змісту латинськими буквами.  Потім вводиться ціле число – номер слова у рядку, що буде перевірятись. Далі за допомогою стандартний функцій для роботи з рядками , як strtok(), рядок розбивається на лексеми. Ці лексеми записуються у окремий масив. Кількість елементів масиву і буде дорівнювати кількості слів. Роздільниками вважаються символи «пробіл» та .,?!:;_-'  . Підраховується кількість слів. Якщо введене число більше нуля і менше або дорівнює кількості знайдених слів, а рядок не порожній, то обчислення продовжуються. Інакше ж виводиться повідомлення про помилку.

Далі у циклі шукається позиція слова під введеним номером. За умовами необхідно врахувати усі символи-роздільники, що розташовані між словами (наприклад кома і пробіл, крапка і пробіл, два пробіли тощо). Тому пошук позиції з використанням складеного масиву слів недоречний, адже втрачаються символи-роздільники, що йдуть підряд. Для цього необхідно «підрахувати слова» вручну. Початком нового слова буде вважатись символ попередній символ якого дорівнює одному з роздільників, а сам він не роздільник. Таким чином обчислення доходять до шуканого слова. При кожній ітерації розглядається наступний символ, і номер символу збільшується на 1. В результаті початком шуканого слова й буде номер ітерації у циклі, тобто останній символ, що розглядається.

Складність алгоритму

Складність алгоритму дорівнює ( 7n+14 )Т, де Т - час виконання.


Блок-схема алгоритму

Лістинг програми

#include <iostream>

#include <string.h>

#include <stdio.h>

using namespace std;

void WordIndex()

{

   char st[100];

  cout<<"\nInput the string:\n\n";

  gets (st);

  int n=0;

  cout<<"\nInput number of the word: " ;

  cin>>n;

  char DELIMITERS[] = " .,?!:;_-'";

  int i=1;

  int wordNum=0;

  char arr[30][100];

  char *p;

  p=strtok(st, DELIMITERS); // splitting string into tokens

  while (p!=0)  // filling the array by tokens

  {

      strcpy (arr[wordNum], p);

      p=strtok(NULL, DELIMITERS);

      wordNum++;

  }

  cout<<endl;

if (n>0&&n<=wordNum&&strlen(st)!=0)

{

  int wordNum2=0;

  while (wordNum2<n-1)

  {

       if(!strchr(DELIMITERS, st[i])&&(strchr(DELIMITERS, st[i-1])!=0))

                  wordNum2++;

       i++;

  }

   int wordPos=i;

 сout<<"\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\nWord number "<<n<<"  is:  " <<arr[n-1];

  cout<<"\nPosition of the "<<n<<" word is: "<<wordPos;   cout<<"\n\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n";

}

  else

   {

       cout<<"ERROR!";

       //WordIndex();

   }

}

int main()

{

  cout<<"\nLab #2 variant 9.\nKseniia Ivchenko\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"<<endl;

   WordIndex();

   cout<<endl;

   return 0;

}


Результат виконання

Висновки

Набуто практичних навичок застосування операцій над стрічками. У ході виконання лабораторної роботи розроблено процедури та функції які забезпечують виконання операції вказаних в завданні. Передбачено всі можливі комбінації вхідних параметрів (нульова довжина, вихід за межі стрічки і т.п.), в тому числі і неправильні. Написано програму для визначення позиції початку в стрічці s слова з номером n.


 

А также другие работы, которые могут Вас заинтересовать

20738. Линейные отображения (операторы). Матрица линейного оператора. Собственные векторы и собственные значения. Характеристическое уравнение 147 KB
  Матрица линейного оператора. Ядром линейного оператора называется Образом линейного оператора называется Ядро Образ Теорема. Каждый вектор разложим по базису B: Столбцы матрицы линейного оператора представляют собой координатные столбцы образов базисных векторов относительно данного базиса.АBfматрица линейного оператора.
20739. Ранг матрицы 107.5 KB
  Вопрос №11 Ранг матрицы. Столбцевым рангом матрицы называют ранг системы столбцов. Строчечным рангом матрицы называют равный столбцевому для произвольной матрицы. Согласно теореме можно говорить просто о ранге матрицы не уточняя о ранге системы строк или столбцов идет речь.
20741. Решение системы линейных уравнений методом последовательного исключения переменных. Структура множества решений системы линейных уравнений 50.5 KB
  Решение системы линейных уравнений методом последовательного исключения переменных. Структура множества решений системы линейных уравнений Метод Жордана – ГауссаМЖГ. Каждое элементарное преобразование системы является равносильным Докво: 1 – равносильное преобразование. x1xn – решение Каждому элементарному преобразованию СЛАУ соответствует элементарное преобразование строк расширенной матрицы системы.
20742. Кольцо. Примеры колец. Простейшие свойства колец. Подкольцо. Гомоморфизмы и изоморфизмы колец 128 KB
  Подкольцо. Алгебра называется кольцом если: 1 абелева группа. Если ассоциативный группоид полугруппа то ассоциативное кольцо. Если моноид существует то ассоциативное кольцо с единицей.
20743. Векторное (линейное) пространство. Линейная зависимость и независимость системы векторов. Базис и ранг конечной системы векторов. Базис и размерность векторного пространства 63.5 KB
  Векторноелинейноепространство. Совокупность всех nмерных векторов образует nмерное пространство ОПР2:S={a1a2ak} произвольная система векторов nмерного пространства Система векторов называется линейно зависимой если не все равны 0такие чтодействительные числа1. Если 1 выполняется только в том случае когда все числа то система векторов называется линейно независимой. Свойства линейно зависимыхнезависимыхсистем: 1Система векторов S линейно зависима тогда и только тогда когда существует вектор линейно выражающийся через...
20744. Числовое поле. Поле комплексных чисел. Геометрическое представление комплексных чисел и операций над ними. Тригонометрическая форма комплексного числа 95.5 KB
  Поле комплексных чисел. Определение: Кольцо К называется полем если К – коммутативное кольцо 0к ≠ 1к Для любого х є К=К {0к} существует х1 є К. хх1 = х1х = 1к любой ненулевой элемент обратим Замечание: В поле любой ненулевой элемент обратим поэтому можно определить операцию деления и частного двух элементов.
20746. Простые числа. Бесконечность множества простых чисел. Каноническое разложение составного числа и его единственность 44.5 KB
  Определение: Всякое натуральное число p 1 не имеющее других натуральных делителей кроме 1 и p называется простым числом. Наименьшее простое число – 2. 1 Если p 1 является наименьшим делителем целого числа n 1 то оно простое число p. 2 Если произведение где p – простое число то по крайней мере либо либо .