Методів обробка рядкових масивів даних

Автор: Пользователь скрыл имя, 20 Сентября 2011 в 10:17, курсовая работа

Описание работы

Об’єкт дослідження – обробка одновимірних масивів.

Предметом дослідження – обробка рядкових масивів даних.

Мета дослідження – простежити сутність методів обробка рядкових масивів даних.

Работа содержит 1 файл

курсовая по информатике.doc

— 192.00 Кб (Скачать)

   Метод get працює аналогічно, але залишає в потоці символ переводу рядка. До рядкової змінної додається завершальний ’\0’.

   2.3.3. Спеціальні функції для роботи з рядками та символами

   Для рядків не визначено операцій присвоювання, додавання, порівняння, оскільки рядок не є основним типом даних. Для роботи з рядками використовуються спеціальні бібліотечні функції, опис яких міститься у файлі <string.h>. Деякі з цих функцій наведено у таблиці 8.1.

   Таблиця 8.1 Функції стандартної бібліотеки для роботи з рядками – файл <string.h>

Прототип  функції Короткий опис та використання    Пояснення
unsigned strlen(const char*s); Обчислює довжину  рядка s. strlen(s); Повертає фактичну довжину рядка, не враховуючи нуль-символ
int strcmp(const char*s1, const char *s2); Порівнює рядки s1 і s2.

strcmp(s1, s2);

Якщо s1<s2, тоді результат від’ємний, якщо s1= =s2, тоді результат рівний 0, якщо s2>s1 – результат  додатний.
int strncmp(const char*s1, const char *s2, n); Порівнює перші  n символів рядків s1 і s2.

strncmp( s1, s2, n);

Якщо n(s1)<n(s2), тоді результат від’ємний, якщо s1= =s2, тоді результат рівний 0, якщо s2>s1 – результат  додатний.
char*strcpy(char*s1, const char*s2); Копіює символи  рядка s2 у рядок s1. strcpy(s1, s2); Нуль-символ при цьому теж включається
char*strncpy(char*s1, const char*s2, int n); Копіює n символів рядка s2 у рядок s1.

strncpy(s1,s2,n);

Кінець рядка  відкидається. Якщо нуль-символ у вихідному  рядку зустрінеться раніше, копіювання припиняється, а решта символів рядка доповнюються ‘\0’-ми.
char*strcat(char*s1, const char*s2); Дописує рядок s2 до рядка s1. strcat(s1, s2); Перший символ s2 записується на місце нуль-символу  рядка s1. До результуючого s1 додається  ‘\0’.
char*strncat(char*s1, const char*s2, size_t n); Дописуються перші  n символів рядка s2 до рядка s1. strncat(s1,s2,5); n-символів рядка  s2 записується до s1, починаючи з  місця нуль-символу s1.
char* strсhr(char*s, int ch) Шукає символ ch у рядку s.

strchr(s, ch);

Повертає вказівник  на перше входження символу в рядок справа. Якщо його немає – повертається NULL
char* strrev(char *s1) Змінює порядок  символів у рядку s1 на протилежний.

strrev(s1, s2);

Дзеркальне  відображення рядка s1.
char *strstr(char*s1, char*s2) Шукає підрядок у рядку.

strstr(s1, s2);

Пошук першого входження s2 у s1. В разі вдалого пошуку повертається вказівник на елемент з s1, з якого починається s2, інакше – NULL.
char *strtok(char*s1, char*s2) Розбиває рядок  на лексеми.

strtok(s1, s2);

Функція повертає вказівник на лексему в s1, відокремлену символом з набору s2 (пробілами або розділовими знаками).
 

   Для роботи з символами у файлі <ctype.h> стандартної бібліотеки визначено функції, наведені в таблиці 8.2:

   Таблиця 8.2 Функції стандартної бібліотеки для роботи з символами-файл <ctype.h>

Прототип  функції    Короткий  опис та використання    Пояснення
int isalnum

(int ch)

Перевіряє чи є  символ ch буквою або цифрою (A-Z, a-z, 0-9).

isalnum(ch);

Повертається true, якщо ch є буквою або цифрою, інакше false
int isalpha

(int ch)

Перевіряє чи є  символ ch буквою (A-Z, a-z). isalpha(ch); Повертається true, якщо ch є буквою, інакше false
int isspace

(int ch)

Перевіряє чи є  символ ch пропуском (пробіл, табуляція, символ нового рядка, нової сторінки). isspace(ch); Повертається true, якщо ch є узагальненим пробілом, інакше false
int isdigit

(int ch)

Перевіряє чи є  символ цифрою (0-9).

isdigit(ch);

Повертається true, якщо ch є цифрою, інакше false
int islower

(int ch)

Перевіряє чи є  символ буквою нижнього регістру (a-z).

islower(ch);

Повертається true, якщо ch є буквою нижнього регістру, інакше false
int isupper

(int ch)

Перевіряє чи є  символ буквою верхнього регістру (A-Z).

isupper(ch);

Повертається true, якщо ch є буквою верхнього регістру, інакше false
int ispunct

(int ch)

Перевіряє чи є  символ символом пунктуації (. , : ; ? ! тощо).

ispunct(ch);

Повертається true, якщо ch є символом пунктуації, інакше false
int tolower

(int ch)

Повертає символ у нижньому регістрі.

tolower (int ch);

Одержує символ ch і повертає його у нижньому регістрі
int toupper

(int ch)

Повертає символ у верхньому регістрі.

toupper(int ch);

Одержує символ ch і повертає його у верхньому  регістрі
 

   Приклад 1:

   Дано  рядок символів, що складається зі слів, слова відокремлені пропусками. Видалити з рядка всі слова, що починаються з цифри.

   #include <iostream.h>

   #include <string.h>

   #include <ctype.h>

   void main()

   {const int n=250;// розмірність рядкового масиву

   char s[n], // вихідний рядок

   w[25], // проміжний масив для збереження  слова з рядка

   *mas[10];// масив вказівників для збереження  слів з рядка

   cout<<“\nBведiть рядок:\n”;

   cin.getline(s, n);

   int k=0, t=0, i, len, j;

   len=strlen(s);

   while(t<len)

   { for(j=0,i=t; isspace(s[i])==0; i++,j++)

   w[j]=s[i]; // виокремлюємо слово до пробілу

   w[j]=’\0’;// формуємо кінець слова

   strcpy(mas[k],w);// копіюємо слово у масив

   k++;// збільшуємо лічильник слів у  рядку

   t=i+1;// перехід через пробіл до наступного  слова у

   // вихідному рядку s

   }

   strcpy(s,”  ”);// очищуємо вихідний рядок

   for(t=0; t<k; t++)// заповнюємо рядок

   if(isalpha(mas[t][0])!=0){// якщо перший символ не цифра

   {strcat(s,mas[t]);// дописуємо слово в оновлений  рядок

   strcat(s,”  “);// додаємо пробіл після слова

   }

   cout<<”\nНовий  рядок:\n”<< s;// виводимо результат

   }

   Приклад 2:

   Програма  яка підраховує скільки разів  задане слово зустрічається у  тексті файлу. Наприклад, у англійській поговірці “Don’t trouble trouble until trouble troubles you” слово “trouble” у чистому вигляді зустрічається 3 рази.

   #include <fstream.h>

   #include <string.h>

   # include<ctype.h>

   void main()

   {const int len=81;

   char word[len], line [len];// масиви для слова і рядка

   cout<< “Введiть слово для пошуку:”; cin>> word;

   int_lword=strlen(word);// визначення довжини слова

   ifstream fin (“text.txt”, ios:: in | ios:: nocreate);

   if(!fin) {cout<< “Помилка відкриття файлу.”<<endl;return 1;}

   int count=0;

   // поки не досягнуто нуль-символу

   while(fin.getline(line, len))

   {char *p=line;// вказівникові присвоєно адресу рядка

   while(p=strstr(p,word))/* якщо слово знайдено

   вказівник стає на позицію

   початку слова у рядку*/

   { // адреса початку входження слова  передається с

   char * c=p;

   p+=l_word;// перехід вказівника р через слово

   // слово не на початку рядка

   if(c!=line)

   /* Чи є символ перед словом  розділювачем? Інакше –

   перейти до наступної ітерації */

   if(!ispunct(*(c-2))&& isspace(*(c-1))) continue;

   // Чи є символ після слова розділювачем?

   if (ispunct(*p)|| isspace(*p)|| (*p==’\0’)) count ++;

   }

   }

   cout << “Слово зустрічається в тексті ”<< count;

   <<”  разів”<<endl;

   }

    2.4.Застосування  рядкового типу даних при розв’язки  деяких задач 

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

#include <stdio.h>

#include <stdlib.h>

#include <string.h> 

int space(char *s); // определяем функцию 

char str[250]; // размер строки для ввода

int main(void)

{

  // если  нужно читать из файла, то  просто раскомментируй строки:

  //freopen("input.txt", "r", stdin); // изменяет стандартный  ввод на файл input.txt

  //freopen("output.txt", "w", stdout); // а вывод на output.txt 

  gets(str); // получаем строку из стандартного  ввода

  space(str); // вызываем функцию обработки  строки

  puts(str); // выводим измененную строку в  стандартный вывод

  getch(); // читает без эхо-отображения отдельный символ прямо  с  консоли

  clrscr(); // очищает текущее текстовое окно и перемещает курсор в верхний               левый угол экрана

  return 0; // возвращаемое значение функции main

}

int space(char *s){ // сама функция обработки строки

int i,j=0; // переменная для хранения индекса  элемента ктроки

char s2[250]="0"; // вспомогательная строка 

for(i=0;i<strlen(s);i++){ // цикл перебора всех символов  исходной строки

    if(s[i]==':'||s[i]=='.'||s[i]==','||s[i]==';'){ //  если  найден какой-то знак препинания

        s2[j]=s[i]; // копируем этот символ  во вспомогательную строку и

        j++; // увеличиваем указатель элемента  строки

        s2[j]=' '; // ставим пробел

    }

    else

      s2[j]=s[i]; // если простой символ - копируем его

    j++; // необходимо для вспомогательной  строки

}

s2[strlen(s2)]='\0'; // добавляем символ конца строки

strcpy(str,s2); // копируем в исходную строку 

    return 0;

} 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

   ЗАКЛЮЧНА  ЧАСТИНА

   В ході курсової роботи я  дізналася  основи мови програмування С++,її історичний розвиток і подальші нововведення, а також більш глибоко ознайомилася з роботою масивів, особливо познайомилася з одновимірними масивами. На практиці застосувала свої знання з обробки рядкових масивів даних. Поглибила розуміння основних принципів мови прогамування С++. Відпрацювала на практиці основні методи та засоби знання  з обробки рядкових масивів даних. Набула практичних навиків роботи. І в цілому треба сказати, що мова С++ в даний час є однією з найбільш поширених мов програмування в світі. 
 
 
 
 
 
 
 
 
 
 

Информация о работе Методів обробка рядкових масивів даних