Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП_Лаб_Гриф.doc
Скачиваний:
7
Добавлен:
14.11.2019
Размер:
2.81 Mб
Скачать

Приклад

/* ЗАНЯТТЯ N 12

Розробив Петров О.Д.

Використання бібліотечних функцій для обробки символьних даних.

Виконати сортування елементів масиву list[N][4], з використанням функцій: strcpy( ), qsort( ), strcmp( ), stricmp( ). Розробити функцію

порівняння рядків з урахуванням і без урахування регістра - sort_function(). */

#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

#include <string.h>

#define N 8

int sort_function( const void *a, const void *b);

char list[N][4]={"1a3", "d34", "1c4", "235", "2h5", "012", "135", "102"};

//list[N][4] - глобальний масив

int registr = 1; //Глобальна перемінна для керування режимом

//роботи функції sort_function(): 0 - з урахуванням регістра, 1-без

int main(void)

{ clrscr( );

int i, j;

char *pch = NULL;

printf("\n\t Вихідний (глобальний) масив char list[N][4]:\n");

for (і = 0; і < N; і ++) printf("%s ", list[ і ] );

printf("\n");

for (і = 0; і < N; і ++) //Сортування масиву

for (int j1 = і + 1; j1 < N; j1++)

{j = sort_function((void *)list[ і ], (void *)list[ j1 ] );

if(j > 0) //Заміна рядків: char *strcpy(char *dest,

{ strcpy(pch, list[ i ] ); // const char *src);

strcpy(list[ i ], list[ j1] );

strcpy(list[ j1 ], pch);

}

}

printf("\n\t Результат сортування: \n");

for (і = 0; і < N; і ++) printf("%s ", list[ і ] );

printf("\n");

printf("\n\t Вихідний (локальний) масив char list[N][4]:\n");

char list[N][4] = {"abc", "cad", "tre", "Cab", "abb", "Abc", "cam", "Cap"};

for (i = 0; i < N; i ++) printf("%s ", list[ i ] );

printf("\n");

qsort((void *)list, N, sizeof(list[0]), sort_function);

//Функція використовує для сортування алгоритм quicksort

//void qsort(void *base, size_t nelem, size_t width,

//int (*fcmp)(const void *, const void *));

printf("\n\t Результат сортування без урахування регістра: \n");

registr = 1;

for (i = 0; i < N; i ++) printf("%s ", list[ i ] );

printf("\n");

registr = 0;

qsort((void *)list, N, sizeof(list[0] ), sort_function);

printf("\n\t Результат сортування c урахуванням регістра :\n");

for (і = 0; і < N; і ++) printf("%s ", list[ і ] );

printf("\n");

// Функції strrev( ) strcat( )

char *s = "Герой ";

char *m = "- Gerakl";

char *t = "retro";

char *sapr = "cae";

printf("\t Вихідний рядок : %s \n", t);

char *g = strrev( t );

printf("\t Перевернений рядок: %s \n", g);

s = strcat(s, m); //char *strcat(char *dest, const char *src);

printf("\t Конкатенація рядків : %s\n", s);

getch( );

return 0;

}

int sort_function(const void *a, const void *b)

{ if (registr = = 0) //З урахуванням регістра

return( strcmp((const char *)a,(const char *)b ));

//int strcmp(const char *s1, const char*s2); Повертає:

// (< 0) якщо s1< s; (= = 0) якщо s1= = s2; (> 0) якщо s1 > s2

else //Без урахування регістра

return( stricmp((const char *)a, (const char *)b ));

}

/* Вихідний (глобальний) масив char list[N][4]:

1a3 d34 1c4 235 2h5 012 135 102

Результат сортування:

012 102 135 1a3 1c4 235 2h5 d34

Вихідний (локальний) масив char list[N][4]:

Abc cad tre Cab abb Abc Cap cam

Результат сортування без урахування регістра:

abb Abc abc Cab cad cam Cap tre

Результат сортування з урахуванням регістра:

Abc Cab Cap abb abc cad cam tre

Вихідний рядок : retro

Перевернений рядок: orter

Конкатенація рядків : Герой - Gerakl */