Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
метод_лб_ пз_Інформатика.doc
Скачиваний:
10
Добавлен:
13.04.2015
Размер:
842.24 Кб
Скачать

Void main (void)

{

char *tk, *spt =", .!";

char st[] = "Сашко, нехай завжди буде солнце!";

cout << st << endl;

int i = 1;

tk = strtok (st, spt);

while (tk!= NULL)

{

cout << i << " слово-" << tk << " містить " <<

strlen(tk) << "символів" << endl;

tk = strtok (NULL,spt);

i++;

}

}

Для видалення з рядка підрядка або символу з заданої позиції в мові С++ немає спеціальної функції, однак можна написати свою, наприклад:

Void del (char *st, int k, int n);

{ int i;

for ( i = k; i < strlen(st)-n; i++)

st[i] = st [i +n ];

st [i] ='\0'; // Запис '\0' у кінець нового рядка

}

де st вихідний рядок (покажчик на неї);

n кількість символів у підрядку що видаляється ;

k позиція, з якої треба видалити підрядок.

Нижче наведений приклад, що ілюструє реалізацію цієї програми

Приклад 3.5 Скласти програму видалення підрядка в n символів з k - ой позиції в рядку.

//P3_5.CPP видалення підрядка

#include < iostream>

using namespace std;

#include <string.h>

const int n = 50;

const int m = 5;

Void del(char *st, int, int);

Void main()

{

char st [n], st1 [m];

cout << "Введіть рядок"<< endl;

cin. getline(st,n);

cout << "Введіть підрядок"<< endl;

cin >> st1;

if(strstr (st,st1)!=NULL)

{

del(st, strstr (st,st1) - st, strlen ( st1) );

cout << st << endl;

}

}

Void del(char *st,int k,int n)

{

int i;

for( i = k ; i < strlen ( st )-n; i++)

st[i] = st[i+n];

st[i] = '\0';

}

void* memchr (const void *st, int s ,int n);  функція шукає символ "s" у рядку *st довжиною n байт, тобто в блоці пам'яті, на який указує покажчик st. Якщо символ s знайдений, функція повертає покажчик на цей символ, у противному випадку повертає NULL.

void* memcmp (const void *st, const void * s , n); і

void* memicmp (const void *st, const void * s ,int count);  функції порівнюють n байт із двох буферів на її початок яких указують s1 і s2.

Функція повертає значення

< 0  якщо s1 < s2;

=0  якщо s1 = s2;

>0  якщо s1 > s2;

char *strset (char *st, int ch);  функція заповнює рядок st символом ch і повертає покажчик на отриманий рядок.

Функції перетворення рядків у числа і чисел у рядки

Ці функції знаходяться у файлі <stdlib.h>

int atoi (const char *s);  перетворить рядок s у число типу int. Повертається отримане число.Число 0, якщо зустрінеться символ, що не може бути перетворений. Рядок повинний містити коректне число, наприклад "2345", і мати наступну структуру:

[ Проміжки ] [знак числа] [ цифри].

long atol (const char *s);  перетворить рядок s у число типу long int (аналогічна функції atoi.)

double atof (const char *s);  перетворить рядок символів у дійсне число double. Якщо при перетворенні зустрічається символ, що не може бути перетворена функція повертає 0.

Оброблюваний рядок повинний мати структуру:

[проміжки] [знак числа] [цифра. цифра] [літера е,Е,d або D] [знак порядку] [цифри порядку], наприклад ”-12345.123 ” або ”-12. 345123 Е3 ”

char *ecvt (double vl, int n, int *dec, int *sign );  перетворить число vl у рядок символів, кількість яких дорівнює n символів цифр. Положення десяткової крапки від першої цифри числа повертається в змінній, на яку вказує dec. Знак числа повертається в змінну на який указує sign. Якщо sign = 0  число додатнє, інакше  від’ємне. Отриманий рядок зберігається у внутрішній пам'яті функції, покажчик повертається на початок сформованого рядка.

сhar *fcvt (double vl, int n, int *dec, int *sign );  аналогічна попередній функції, але для ecvt - параметр dec задають загальна кількість цифр, то для fcvt - кількість цифр після десяткової крапки.

сhar *gcvt (double vl, int n, сhar *buf);  перетворить число vl у рядок, що поміщає в буфер, покажчик на початок якого є buf, n  число цифр у символічному записі перетвореного числа. Отриманий рядок містить символ знака числа і десяткової крапки, якщо число містить менше десяткових цифр, ніж n. У цьому випадку молодша цифра дробової частини відкидається. Якщо перетворене число не міститься в задану кількість цифр n, функція генерує символьний запис в експонентній формі, включаючи в рядок символ Е и знак порядку. Функція повертає покажчик на початок сформованого рядка.

strlen (st) - повертає довжину st без нуль - термінатора '\0'.

Функції перевірки символів

Ці функції знаходяться у файлі <ctype.h>:

isgraph (s)  повертає значення ”істина” тобто не нуль, якщо s є друкованим символом і “неістина ” (тобто 0) , якщо s є проміжком або яким - небудь не відображуваним символом.

isprint (s)  повертає значення ”істина” тобто не нуль , якщо s є друкованим символом, включаючи проміжок і ”неістина” (тобто 0) у всіх інших випадках.

ispunct (s)  повертає значення "істина" тобто не нуль , якщо s є знаком пунктуації(будь-який друкований символ крім проміжку і “неістина” (тобто 0) в інших випадках.

isdigit (s)  повертає значення "істина" тобто не нуль , якщо s є цифрою від 0 до 9 і “неістина” (тобто 0) в інших випадках.

isalnum (s)  повертає значення "істина", тобто не нуль, якщо s є цифрою або літерою (заголовною або строковою ) і “неістина” (тобто 0) у всіх інших випадках (тобто перевіряє алфавітні і цифрові символи).,

tolower (s)  перетворить символ s до нижнього регістра;

toupper (s)  перетворить символ s до верхнього регістра;

atoi (s)  перетворить рядок s до ціле число;

atol (s)  перетворить рядок s до довгого цілого;

atof (s)  перетворить рядок s до числа з крапкою.

Розглянемо ряд прикладів з використанням строкових функцій .

Приклад 3.5 Ввести список прізвищ (рядків) і відсортувати його за алфавитом.

//P3_5.CPP сортування списку прізвищ за алфавитом

#include <string.h>

#include < iostream>

using namespace std;