Текстуални податоци (string)

 https://www.geeksforgeeks.org/stdstring-class-in-c/?ref=lbp

https://pdf.co/blog/c-strings-with-examples

https://mendo.mk/Lecture.do?id=19


Текстуални податоци (string)

Стандардната библиотека на шаблони нуди посебен контејнер (string) за работа со текстуални податоци. C ++ има во својата дефиниција начин да ја претстави низата карактери како објект на класа. Оваа класа се нарекува std :: string.

String  дава еден вид проширување на операциите кои се нудат од страна на vector<char>. Како таков контејнер, string ги нуди повеќето методи кои ги нуди и контејнерот вектор - size, empty, push_back, begin, end, resize, clear, insert и erase. Дополнително, string (како и вектор) овозможува пристапување до елемент на произволна позиција - преку операторот '[p]' (во овој случај, тоа се знаците во текстот). За разлика од vector<char>, string користи посебен механизам за управување со меморија, и нуди неколку методи за манипулирање со текстуални податоци.

Спојување на два string-a. 
- со помош на операторот '+':   имено, два string-a str1 и str2 може да ги споиме во нов string со нивно едноставно "собирање" - str1+str2, или, доколку е тоа потребно, str1+=str2. 
-со методот append(vtor):    prv.append(vtor) ќе ги спои string-овите prv и vtor и ќе го смести резултатот во променливата prv.
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
#include <iostream>
#include <string>
using namespace std;
int main()
{
string a = "pocetok";
string b = " i ";
string c = "kraj";
cout << a.size() << endl; //pechati '7'
for (int i=0; i<c.size(); i++)
cout << c[i] << " "; //pechati 'k r a j ';
cout << endl;
a += b; //a='pocetok i '
a.append(c); //a='pocetok i kraj'
a.push_back('!'); //a='pocetok i kraj!'
string res = b + c; //res=' i kraj'
cout << res << endl; //pechati ' i kraj'
return 0;
}
#include <iostream>
#include <string>
using namespace std;
int main () {

   string str1 = "Hello";
   string str2 = "World";
   string str3;
   int  len ;
   // copy str1 into str3
   str3 = str1;
   cout << "str3 : " << str3 << endl;
   // concatenates str1 and str2
   str3 = str1 + str2;
   cout << "str1 + str2 : " << str3 << endl;
   // total length of str3 after concatenation
   len = str3.size();
   cout << "str3.size() :  " << len << endl;
   return 0;
}
str3 : Hello
str1 + str2 : HelloWorld
str3.size() :  10
Контејнерот string нуди метод substr преку кој може да вратиме одреден дел од почетниот string. Доколку го повикаме методот преку наведување на само еден аргумент од тип int, на пример str.substr(x), тој ќе врати дел од оригиналниот string str кој почнува од позицијата x и завршува со завршување на string-от str. 
Доколку наведеме два аргумента од тип int, на пример str.substring(x, len), операцијата ќе врати дел од оригиналниот string str кој почнува од позиција x и има големина најмногу len (доколку од x до крајот на оригиналниот string има помалку од len знаци, се враќаат само онолку знаци колку што има до крајот на string-от).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <string>
using namespace std;
int main()
{
string str = "alo alo alo halo";
cout << str.substr(0, 3) << endl; //pechati 'alo'
cout << str.substr(0, 5) << endl; //pechati 'alo a'
cout << str.substr(12) << endl; //pechati 'halo'
cout << str.substr(12, 100) << endl; //pechati 'halo'

return 0;
}
Контејнерот string може едноставно да се претвори (доколку има потреба од тоа) во стандардна текстуална низа (C тип на текстуален податок - char*) со повикување на методот c_str(). На пример, следниве две линии претвораат string во низа од char знаци:
1
2
char* cstr = new char [str.size()+1];
strcpy (cstr, str.c_str());
За користење на string, потребно е вклучување на соодветната датотека која ја содржи неговата дефиниција (#include <string>).

Функции за работи со стринг дефинирани во датотеката <string>

· споредување на стрингови – sting1.compare(sting2); - вpaќa 0 ako стринговите ce eдникви, a aко нe ce 1
· спојување на стрингови – string1.append(string2) или со знак „+“;
· издвојување на подстринг– string1.substr(poz,br_karakteri);
· заменување на стрингови – string1.swap(string2);
· нaoѓaњe нa подстринг – string1.find(string2) и string1.rfind(string2) ;
· замена на карактер во стринг – string1.replace(poz,br_karakteri, string2);
· вметнување на еден стринг во друг – string1.insert(poz,string2);
· должина на стринг – string1.length();

Програма со која се внесуваат два стринга и се претвараат во стандардна текстуална низа 
#include <iostream> 
#include <cstring> 
using namespace std; 
int main () 
 string str, str1;  
 int k,i,k1; 
 getline(cin,str); 
 getline(cin,str1); 
 k=str.size(); 
 k1=str1.size(); 
 cout<<"Dol na prvata niza e"<<k<<endl; 
 cout<<"dol na vtorata niza e "<<k1<<endl; 
 char s[k],s1[k1]; 
 strcpy (s,str.c_str()); 
 strcpy (s1,str1.c_str()); 
 cout<<"Nizite znaci se"<<endl; 
 for(i=0;i<k;i++) 
 cout<<s[i]; 
 cout<<endl; 
 for(i=0;i<k1;i++) 
 cout<<s1[i]; 
 cout<<endl; 
return 0; 


No comments: