- •Рядки, дії з рядками
- •Рядки
- •Рядки
- •Рядки
- •Рядки
- •Рядки
- •Рядки
- •Рядки.
- •Рядки
- •Рядки і вказівники
- •Рядки.
- •Рядки.
- •Рядки.
- •Рядки.
- •Рядки.
- •Рядки. Введення-виведення рядків
- •Строки
- •Рядки.
- •Рядки.
- •Рядки.
- •Рядки.
- •Рядки.
- •Рядки.
- •Рядки.
- •Рядки.
- •Рядки.
- •Рядки.
- •Рядки.
- •Рядки.
- •Рядки.
- •Рядки.
- •Рядки.
- •Рядки.
- •Рядки.
- •Рядки.
- •Рядки.
- •Рядки.
- •Рядки.
- •Рядки.
- •Рядки.
Рядки. |
Пошук рядка в рядку |
Операції з рядками |
Функція 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