Текстуални низи

Презентација III - 4 

https://www.tutorialspoint.com/cplusplus/cpp_strings.htm

mendo.mk

Низи од знаци

C++ овозможува работа со текстуални податоци на неколку начини.
- koристење на класата string
- работа со текстуални податоци преку нивно третирање како низа од знаци (низа од податок char)

Низи од знаци се креираат на ист начин како и останатите еднодимензионални низи:

char ime[N];

ime го означува името на променливата, 
N го означува бројот на знаци (од колку елементи е составена низата ime). 
Еден од овие N знаци (зависно од текстуалниот податок кој ќе се чува во низата) ќе биде еднаков на '\0' - и ќе претставува т.н. null знак или null terminator. Овој знак е потребен за да го означи крајот на текстуалниот податок и да ни овозможи во низа со големина N да чуваме текстуални елементи кои се пократки од N знаци. 
На следната слика е претставен начинот на сместување на текстуални податоци во низата од знаци name[13]:


На овој начин, кога сакаме да печатиме податоци, програмата знае дека треба да печати знаци сé додека не стигне до знакот '\0'. Сите знаци по '\0' се неважни и не се користат.

C++ овозможува иницијализација на овие низи од знаци на 2 начини:

char name[] = {'D', 'a', 'r', 'k', 'o', '\0'};             //treba da se navede '\0'
char name[] = "Darko";                                   //se podrazbira '\0'

И двата начина креираат низа name со големина 6. Низата го содржи текстуалниот податок "Darko" и null знак '\0' за означување на крај на текстот. Бидејќи низите имаат големина која се дефинира при нивното креирање, не е дозволено подоцнежно менување на нивната вредност преку користење на операторот '=' (кај string класата ова е дозволено - таа работи со динамички резервирана меморија). 
На пример, следниов код е погрешен:

char name[] = "Darko";
name = "Petar"; //GRESHKA!

Следната програма прикажува како може да се користат низите од знаци во комбинација со потоците cin и cout:

#include <iostream>
using namespace std;
int main()
{
char array[] = "Darko";
array[0] = 'M';               // niza
cout << array << endl; // pechati 'Marko'
char text[100];
cout << "Vnesi eden zbor: ";
cin >> text;                    //vnesi  eden zbor
cout << text;                  //go pechati vneseniot zbor
return 0;
}

Marko           
Vnesi eden zbor: Jana 
Jana  

Marko            
Vnesi eden zbor: Prograsmki jazici    
Programski  

Наредбата cin >> text; чита еден збор внесен од страна на корисникот и, истиот го сместува во променливата text. На крајот од текстот, автоматски, се додава и null знак
cin чита податоци до првото појавување на празно место, tab или знак за нов ред,

C++ String to read a word

C++ program to display a string entered by user.

#include <iostream>
using namespace std;
int main()
{
    char str[100];
    cout << "Enter a string: ";
    cin >> str;
    cout << "You entered: " << str << endl;
    cout << "\nEnter another string: ";
    cin >> str;
    cout << "You entered: "<<str<<endl;
    return 0;}
Enter a string: C++
You entered: C++
Enter another string: Programming is fun.
You entered: Programming
Функцијата cin.getline(char[], N) - се користи кога читаме цел ред текст, а не само еден збор

#include <iostream>
using namespace std;
int main()
{
    char str[20];
    cout << "Enter Your Name::";
      // see the use of getline() with array
    // str also replace the above statement
    // by cin >> str and see the difference
    // in output
    cin.getline(str, 20);
      cout << "\nYour Name is:: " << str;
    return 0;
}
Enter Your Name::Marija Atanasoska 
Your Name is:: Marija Atanasoska

Во C++, секогаш кога користиме наводници за креирање на текстуален податок (cout << "Darko"), во позадина всушност се работи со C string-ови (низи од знаци со null знак). Кога креираме променлива од тип string и, преку операторот '=', и доделуваме текстуална вредност (string str = "Darko"), програмата автоматски го претвора податокот од низа од знаци со null знак во string.

C++ String to read a line of text

#include <iostream>
using namespace std;
int main()
{
    char str[100];
    cout << "Enter a string: ";
    cin.get(str, 100);
    cout << "You entered: " << str << endl;
    return 0;}
Enter a string: Programming is fun.
You entered: Programming is fun.

C++ string using string data type

#include <iostream>
using namespace std;
int main()
{
    // Declaring a string object
    string str;
    cout << "Enter a string: ";
    getline(cin, str);
    cout << "You entered: " << str << endl;
    return 0; }
Enter a string: Programming is fun.
You entered: Programming is fun.

Постојат 7 основни функции кои овозможуваат работа со текстуални низи (сите дефинирани во датотеката "<cstring>"):


Функции за работа со знаци:

- isalpha(ch) – true ако ch е алфабетски знак инаку false
- isupper(ch)- true ако ch е голема буква инаку false
- islower(ch)- true ако ch е мала буква инаку false
- isdigit(ch)- true ако ch е цифра од 0 до 9 инаку false
- toupper(ch), tolower(ch) – претвораат во мала т.е. во голема буква

Следнава програма употребува некои од функциите споменати погоре:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char a[] = "prva niza";
char b[] = "vtora niza";
char c[] = "tekst";
char d[] = "tekst";
cout << strlen(a) << endl; //pechati '9'
cout << strlen(c) << endl; //pechati '5'
char t[100];
strcpy(t, "Nekoja vrednost"); //t="Nekoja vrednost"
strcpy(t, "Neshto drugo"); //t="Neshto drugo"
strcpy(t, a); //t="prva niza"
strncpy(t, b, 4); //t="vtor niza" (ne se kopira '\0')
t[4] = '\0'; //t="vtor"
strcat(t, b); //t="vtorvtora niza"
cout << t << endl; //pechati 'vtorvtora niza'
cout << strcmp(t, a) << endl; //pechati '1'
cout << strcmp(c, d) << endl; //pechati '0'
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <string>
using namespace std;
int main()
{
string a, b;
a = "prva";
b = "vtora";
cout << a.size() << endl; //pechati '4'
cout << b.size() << endl; //pechati '5'
a = a + " " + b;
cout << a << endl; //pechati 'prva vtora'
b = b + b;
cout << b << endl; //pechati 'vtoravtora';
return 0;
}
1. Which of the following is a static string?
A. Static String
B. "Static String"
C. 'Static String'
D. char string[100];

2. What character ends all strings?
A. '.'
B. ' '
C. '\0'
D. '\n'

3. Which of the following reads in a string named x with one hundred characters?
A. cin.getline(x, 100, '\n');
B. cin.getline(100, x, '\n');
C. readline(x, 100, '\n');
D. read(x);

4. Which of the following functions compares two strings?
A. compare();
B. stringcompare();
C. cmp();
D. strcmp();

5. Which of the following adds one string to the end of another?
A. append();
B. stringadd();
C. strcat();
D. stradd();




No comments: