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;
Void main( )
{
char mst[ 5] [15];
char *ps[5], *ptr;
int і, n, k;
cout << "Введіть прізвища \n";
for( i = 0; i < 5; i++)
{
gets (mst [i] );
ps[i] = mst[i];
}
cout << "\n\t Вихідний список\n\n";
for( i = 0; i < 5; i++)
puts ( ps[ i ] );
// Сортування масиву
n = 5;
for (i = 1; i < n; i++) //кількість переглядів
for ( k = 0; k < ( n – i ); k++)
if ( strcmp ( ps[k], ps[k+1] ) > 0)
{
ptr = ps[k];
ps[k] = ps[k+1];
ps[k+1] = ptr;
}
cout << "\n\n\t Відсортований список \n\n";
for ( i = 0; i < 5; i++)
puts ( ps[ i ] );
}
Приклад 3.6 Ввести рядок і видалити в ньому зайві проміжки.
//P3_6.CPP ( видалення зайвих проміжків
#include <string.h>
#include < iostream>
Using namespace std;
Void main()
{
char st[] = "Прийшла весна в мої краї.";
Int i,j;
for (i = 0; i < strlen(st)-1; i++)
{
if ((st[i] == ' ') &&(st[i+1] == ' '))
{
for (j = i+1; j < strlen(st); j++)
st[j-1]=st[j];
I-- ;
}
cout << st;
Return 0;
}
Приклад 3.7 Визначити позицію входження підрядка в рядок.
//P3_7.CPP пошук позицій входження підрядка в рядок.
#include <string.h>
#include < iostream>
Using namespace std;
const int m = 50;
Void main()
{
char *pt, mainstr[m], substr[m];
int n, k = 0;
cout << "Введіть рядок " << endl;