Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
л_13_Строки у.ppt
Скачиваний:
24
Добавлен:
30.05.2020
Размер:
1.33 Mб
Скачать
позиция строки

Рядки.

Пошук рядка в рядку

Операції з рядками

Функція char * strstr (char * s1, const char * search)

виконує пошук рядка search в рядку s1 і повертає покажчик на перше входження search в рядок s1. Якщо рядок не виявлено, то повертається вказівник NULL.

const int MAX = 80;

char s1[MAX]="abcdef", s2[MAX]="cd"; char *s=strstr(s1, s2);

if (s) cout<<" n =" << int(s-s1) <<endl; //n=2 -

Функція size_t strspn (const char * s1, const char * charSet)

визначає і повертає довжину початкової частини рядка s1, що складається тільки з символів, що містяться в рядку charSet. 0-символ в порівнянні не бере участь.

const int MAX = 80;

char s1[MAX]="abcdef", s2[MAX]="aabb";

size_t n = strspn(s1, s2);

//2

 

 

 

 

 

 

typedef unsigned size_t;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

31

 

Стандартні функції роботи з рядками

 

 

 

 

 

 

 

 

Рядки.

 

 

 

 

 

Пошук рядка в рядку

 

 

 

Операції з рядками

 

 

 

 

 

 

 

 

 

 

Функція size_t strcspn (char *s1, const char *charSet)

 

 

 

 

визначає і повертає довжину початкової частини рядка s1, що складається

 

з

 

 

 

 

 

 

 

 

символів, які не містяться в рядку charSet. 0-символ в порівнянні не бере

 

 

 

 

участь. Якщо рядок s1 починається з символу, що зустрічається в рядку

 

charSet, повертається нуль. Якщо рядок s1 не містить жодного символу рядка

 

charSet, повертається значення збігається з довжиною рядка s1.

 

const int MAX = 80;

 

 

 

 

 

 

char s1[MAX]="abcdef", s2[MAX]="aabb";

 

 

 

 

 

typedef unsigned size_t;

 

 

size_t n = strcspn(s1, s2);

//0

 

 

 

 

 

 

 

 

 

 

 

 

 

Функція char * strpbrk (char *s1, const char *s2)

повертає покажчик на символ, який є першим входженням будь-якого з символів рядка s2 в рядок s1. Якщо символ не знайдений, то повертається вказівник NULL.

const int MAX = 80;

char s1[MAX]="abcdef", s2[MAX]="cf"; char *s= strpbrk(s1, s2);

cout << int(s-s1) << endl; //2

32

Стандартні функції роботи з рядками

Рядки.

Операції з рядками

Перетворення рядка в число (<stdlib.h>, cstdlib>)

Преутворений в число рядок може містити:

•послідовність цифр;

•запис дійсного числа у формі з фіксованою точкою або в експоненційної формі (з наявністю десяткового дробу, цифр порядку і символів е або Е, наприклад, 12.345Е-2);

•символи пробілу, табуляції, знака числа.

Ознакою кінця запису числа в преобразуемой рядку є перший символ, який не може бути інтерпретований як символ числа відповідного типу.

Функция double atof (char *s)

перетворить рядок s, що містить символьне представлення дійсного числа, у

відповідне десяткове дійсне число; ознакою кінця числа служить перший символ, який не може бути інтерпретований як належить числу.

char st[10]="1.2e02.";

 

double d = atof(st);

 

cout<<d<<endl;

//120

Аналогічні функції atoi () і atol () використовуються для перетворення рядка в ціле або довге ціле число.

33

Стандартні функції роботи з рядками

Стандартні функції роботи з рядками

Рядки.

Операції з рядками

Перетворення рядка в число (<stdlib.h>, cstdlib>)

Функція long strtol (const char *s, char **endptr, int base) перетворить рядок s, що містить символьне представлення цілого числа, у

відповідне десяткове довге ціле число в системі числення base;

ознакою кінця числа служить перший символ рядка endptr, який не може бути

інтерпретований як належить числу.

#include <stdlib.h> int main()

{

const int MAX = 80; char str[MAX] = "a"; char *endptr;

long il = strtol(str, &endptr, 2); cout <<il << " " << endptr << endl;

//0 a, т.к. воно є помилковим символом в 2 с / с

cout<<endl;

il = strtol(str, &endptr, 16);

cout << il << " " << endptr << endl; //10 _getch();

return 0;

}

Рядки.

 

 

Операції з рядками

 

 

Перетворення рядка в число(<stdlib.h>, cstdlib>)

 

 

 

 

 

 

 

 

 

 

Функція double

strtod (const char *s, char **endptr)

 

 

перетворить рядок s, що містить символьне представлення дійсного числа, у

 

відповідне десяткове дійсне число; ознакою кінця числа служить перший

 

символ рядка endptr, який не може бути інтерпретований як що належить

 

числу.

 

 

#include <stdlib.h> int main()

{

const

int MAX = 80;

 

 

char

str[MAX]="3.1415",

 

 

str1[MAX]="3.1415e+00",str2[MAX]="3.14#00";

char *endptr;

 

 

 

 

double

d = strtod(str, &endptr);

 

cout << d <<"

"

<< endptr

<<endl; //3.1415

d = strtod(str1,

&endptr);

 

 

cout << d <<"

"

<< endptr

<<endl;

//3.1415

d = strtod(str2,

&endptr);

 

 

cout << d <<"

"

<< endptr

<<endl;

//3.14 #00

_getch();

 

 

 

 

return 0;

 

Стандартні функції роботи з рядками

}

 

 

 

 

 

 

 

 

 

 

Рядки.

 

 

 

 

 

 

 

 

Операції з рядками

 

 

 

 

 

 

Приклад застосування функції перетворення

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

#include <cstdlib>

 

 

 

 

int main()

 

 

 

 

 

{

 

 

 

 

 

 

 

 

 

 

char a[ ] = "10) rost 162 cm, ves 59.5 kg";

 

 

 

int num;

 

 

 

 

 

long rost;

 

 

 

 

 

double ves;

 

 

 

 

 

num = atoi(a);

 

// перетворення з символу 1 з індексом

 

0 і до символу)

 

 

 

 

 

rost = atol (&a[11]);

// перетворення з символу 1 з індексом

 

11 і до 'пробілу'

 

 

 

 

 

ves = atof (&a[25]);

// перетворення з символу 5 з індексом

 

25 і до 'пробілу'

 

 

 

 

 

cout << num << " " << rost << " " << ves; //10 162

59.5

 

_getch();

 

 

 

 

 

return 0;

 

 

 

 

 

}

 

 

 

 

 

 

 

 

 

 

 

 

Стандартні функції роботи з рядками

36

Рядки.

Передача рядка у функцію в якості параметрів

Можливість виконання у функції тих чи інших дій з рядком залежить від опису аргументу, переданого у функцію (рядок- вказівник або рядок-масив), і від специфікації формального параметра. Аналізуйте опис рядків в викликає функції і рядків - формальних параметрів і вибирайте останнє, залежно від дій, які необхідно виконати з рядком у функції.

Розглянемо поєднання різних описів рядків, які можуть виступати в якості фактичних і формальних параметрів.

37

Рядки.

Передача рядка у функцію в якості параметрів

#include <ctype.h>

void convertToUppercase (char *); int main()

{char string [ ] = “aaaaaaa”; //string - константний вказівник на // неконстантні дані

cout << string <<endl; convertToUppercase(string); //ок

cout << string <<endl; _getch();

return 0;

}

void convertToUppercase (char *sPtr)

{ // sPtr - неконстантні вказаівникі на неконстантні дані while (*sPtr != ‘\0’) {

*sPtr = toupper(*sPtr); ++sPtr;

}

}

Рядки.

Передача рядка у функцію в якості параметрів

#include <ctype.h> void convertToUppercase (const char *sPtr);

int main()

{ char string [ ] = “aaaaaaa”; //string - константний вказівник на неконстантні

дані

cout << string <<endl; convertToUppercase (string);

cout <<endl; _getch();

return 0;

}

void convertToUppercase (const char *sPtr)

//sPtr неконстантний вказівник на константні дані

//тобто дані «тільки для читання»

{for ( ; *sPtr != ‘\0’; sPtr++) // модифікувати неконстантний вказівник можна

{cout <<*sPtr; // читати константне значення можна

//*sPtr = toupper(*sPtr); - помилка в даному випадку!

}// не можна модифікувати константні дані

}

Рядки.

Передача рядка у функцію в якості параметрів

#include <ctype.h>

void convertToUppercase (char *); int main()

{ char *s1 = “pointer_of_simvol”; //s1 -

cout << string <<endl; convertToUppercase (s1);

cout <<endl; _getch();

return 0;

}

неконстантний вказівник на константні дані

Рядок-константу, передану у функцію як параметр, не можна змінити у функції.

void convertToUppercase (char *sPtr)

{

while (*sPtr != ‘\0’) { // sPtr - неконстантний вказівник на неконстантние дані //*sPtr = toupper(*sPtr); модифікація константних даних, помилка! ++sPtr; // неконстантний вказівник можна модифікувати

}

}

40

Соседние файлы в предмете Объектно ориентированное программирование