Автор: Пользователь скрыл имя, 20 Сентября 2011 в 10:17, курсовая работа
Об’єкт дослідження – обробка одновимірних масивів.
Предметом дослідження – обробка рядкових масивів даних.
Мета дослідження – простежити сутність методів обробка рядкових масивів даних.
Метод 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]=
s2[j]=s[i]; // копируем этот символ во вспомогательную строку и
j++; // увеличиваем указатель
s2[j]=' '; // ставим пробел
}
else
s2[j]=s[i]; // если простой символ - копируем его
j++; // необходимо для
}
s2[strlen(s2)]='\0'; // добавляем символ конца строки
strcpy(str,s2);
// копируем в исходную строку
return 0;
}
ЗАКЛЮЧНА ЧАСТИНА
В
ході курсової роботи я дізналася
основи мови програмування С++,її історичний
розвиток і подальші нововведення, а також
більш глибоко ознайомилася з роботою
масивів, особливо познайомилася з одновимірними
масивами. На практиці застосувала свої
знання з обробки рядкових масивів даних.
Поглибила розуміння основних принципів
мови прогамування С++. Відпрацювала на
практиці основні методи та засоби знання
з обробки рядкових масивів даних. Набула
практичних навиків роботи. І в цілому
треба сказати, що мова С++ в даний час є
однією з найбільш поширених мов програмування
в світі.