Символни низове в С/C++. Библиотечни функции за работа с низове. Булев тип данни.

Символни низове в С/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);
}