Символни низове в С/C++. Библиотечни функции за работа с низове. Булев тип данни.
1. Символни низове
а) дефиниране на низове
Досега във всички примери използвахме само променливи, константи и масиви от числов тип. Освен тях съществуват и низове от знаци (стрингове), които се използват за съхранение на поредица от символи – например думи, изречение и други. В езика С++ няма определен тип за представяне на стрингове, както в други езици (например Паскал). За тази цел в С++ се използват масиви от тип char.
char име_на_низ [брой_символи];
Пример:
char s [ 16 ]; - дефинира низ от 16 символа
Не е нужно символният низ да съдържа определения при дефиницията брой символи.
Например низът s може да съхранява думите: “Здравей”, “Навън вали дъжд” или “а”.
В края на всеки низ се поставя специалния знак “\0” (символът null), който указва края на низа.
Ето как се представят в паметта горните три примера:
|
З |
д |
р |
а |
в |
е |
й |
\0 |
|
|
|
|
|
|
|
|
|
Н |
а |
в |
ъ |
н |
|
в |
а |
л |
и |
|
д |
ъ |
ж |
д |
\0 |
|
a |
\0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
б) инициализация на низове
- първи начин - инициализация като масив
Тъй като низовете представляват масиви от символи, те се подчиняват на същите правила, както масивите. Например инициализация на низ можем да направим по следния начин:
char mystring [ ] = { 'З', 'д', 'р', 'а', 'в', 'е', 'й', '\0' } - задаваме стойности на масива mystring от 8 елемента
Важно! При инициализацията на низове като масиви не бива да се пропуска символът за край на низа - \0.
- втори начин - чрез използване на константен низ
char mystring [ ] = "Здравей";
Важно! При инициализацията на низове като константи символът за край на низа се добавя автоматично.
Важно! Този вид инициализация е позволен само в момента на декларирането на низа.
Например изразът mystring [ ] = "Здравей"; е невалиден, тъй като не е разрешено да се присвоява стойност едновременно на всички елементи на масива.
Валидни обаче са следните изрази:
mystring [ 0 ] = 'З';
mystring [ 1 ] = 'д';
mystring [ 2 ] = 'р';
mystring [ 3 ] = 'а';
mystring [ 4 ] = 'в';
mystring [ 5 ] = 'е';
mystring [ 6 ] = 'й';
mystring [ 7 ] = '\0';
2. Библиотечни функции за работа с низове
Важно! За използването на функциите за работа с низове е нужно включването на библиотеката string.h.
- strcpy ( низ1, низ2 )- копира съдържанието на низ2 в низ1.
- strlen ( низ ) - връща дължината на низа (броя символи);
- strcat ( низ1, низ2 ) - добавя низ2 в края на низ1;
- strcmp ( низ1, низ2 ) - сравнява низ1 и низ2 и връща 0, ако двата низа са еднакви;
- strcspn ( низ1, низ2 ) - връща позицията на низ2 в низ1;
- atoi ( низ ) - преобразува низа в число от тип int;
- atol ( низ ) - преобразува низа в число от тип long;
- atof ( низ ) - преобразува низа в число от тип float;
Пример: - използване на функция strcpy
#include "iostream.h"
#include "string.h" // включване на библиотеката за работа с низове
main ( )
{
char myname [ 20 ];
strcpy (myname, "Иван Иванов"); // присвоява стойността "Иван Иванов" на низа myname
cout << myname;
}
- използване на потребителска функция за копиране на низове
Пример: - използване на потребителска функция за задаване стойност на низ
#include "iostream.h"
void setstring ( char s1 [], char s2 [] )
{
int i=0;
do {
s1[i] = s2[i];
i++;
} while (s2 [i] != 0 );
s1[i]='\0';
}
main ( )
{
char myname [ 20 ];
setstring (myname, "Иван Иванов\0"); // присвоява стойността "Иван Иванов" на низа myname
cout << myname;
}
Пример: - използване на функция strlen
#include "string.h"
main( )
{
char s1[30]="adfgd1234";
cout << strlen(s1); // извежда 9
}
Пример: - използване на функция strcat
#include "string.h"
main( )
{
char s1[30]="Здрасти";
strcat(s1, " Шефе!");
cout << s1; // извежда Здрасти Шефе!
}
Пример: - използване на функция strcmp
#include "string.h"
main( )
{
char s1[30]="adfgd1234";
cout << strcmp(s1,"2456"); // извежда 1 - низовете не са еднакви
}
Пример: - използване на функция strcspn
#include "string.h"
main( )
{
char s1[30]="adfgd1234";
cout << strcspn(s1,"2"); // извежда 6
}
Пример: - използване на макроса atoi
#include "stdlib.h"
main( )
{
char s1[30]="1234";
cout << atoi(s1); // извежда числото 1234
}
Пример: - използване на макроса atol
#include "stdlib.h"
main( )
{
char s1[30]="12345678";
cout << atol(s1); // извежда числото 1234578
}
Пример: - използване на макроса atof
#include "stdlib.h"
main( )
{
char s1[30]="1234.5678";
cout << atof(s1); // извежда числото 1234.57
}
3. Булев тип данни - приемат стойност лъжа или истина (0 или 1)
bool именапроменлива;
Пример:
main()
{
bool a;
a=true;
cout << a; // Извежда 1
}
Пример:
main()
{
bool a;
a=(5<2);
cout << a; // Извежда 0 (лъжа); еквивалентно е на cout << (5<2);
}