logo

std::string клас в C++

C++ има в своята дефиниция начин за представяне на a последователност от символи като обект на класа . Този клас се нарича std::string. Класът string съхранява символите като последователност от байтове с функционалността да позволява достъп до еднобайтовия знак .

Низ срещу масив от знаци

низ



Char Array

 Низът е a клас, който дефинира обекти които да бъдат представени като поток от знаци.Знаков масив е просто масив от знаци който може да бъде прекратен с нулев знак.
В случай на низове паметта е разпределени динамично . Повече памет може да бъде разпределена по време на изпълнение при поискване. Тъй като няма предварително разпределена памет не се губи памет .Размерът на масива от символи трябва да бъде разпределени статично повече памет не може да бъде разпределена по време на изпълнение, ако е необходимо. Неизползвани разпределени паметта също се губи
Тъй като низовете са представени като обекти няма разпадане на масива възниква.Има а заплаха от разпадане на масива в случай на масив от знаци. 
Струните са по-бавни в сравнение с изпълнението, отколкото масив от знаци.Изпълнение на масивът от символи е по-бърз отколкото std:: низ. 
Клас низ дефинира редица функционалности които позволяват множество операции върху низове.Символни масиви не предлагайте много вградени функции за манипулиране на низове.

Операции върху низове

1) Функции за въвеждане

функцияОпределение
getline() Тази функция се използва за съхраняване на поток от знаци, както е въведен от потребителя в паметта на обекта.
push_back() Тази функция се използва за въвеждане на знак в края на низа.
pop_back()Въведена от C++11 (за низове), тази функция се използва за изтриване на последния знак от низа. 

Пример:

CPP
// C++ Program to demonstrate the working of // getline() push_back() and pop_back() #include    #include  // for string class using namespace std; // Driver Code int main() {  // Declaring string  string str;  // Taking string input using getline()  getline(cin str);  // Displaying string  cout << 'The initial string is : ';  cout << str << endl;  // Inserting a character  str.push_back('s');  // Displaying string  cout << 'The string after push_back operation is : ';  cout << str << endl;  // Deleting a character  str.pop_back();  // Displaying string  cout << 'The string after pop_back operation is : ';  cout << str << endl;  return 0; } 

Изход
The initial string is : The string after push_back operation is : s The string after pop_back operation is : 

Времева сложност: O(1)



Космическа сложност: O(n) където n е размерът на низа

c# превключвател

2) Функции за капацитет

функцияОпределение
капацитет()Тази функция връща капацитета, определен за низа, който може да бъде равен или по-голям от размера на низа. Разпределя се допълнително пространство, така че когато новите символи се добавят към низа, операциите могат да се извършват ефективно.
преоразмеряване() Тази функция променя размера на низа, като размерът може да бъде увеличен или намален.
дължина()Тази функция намира дължината на низа.
shrink_to_fit()Тази функция намалява капацитета на низа и го прави равен на минималния капацитет на низа. Тази операция е полезна за спестяване на допълнителна памет, ако сме сигурни, че не трябва да се добавят допълнителни знаци.

Пример:

CPP
// C++ Program to demonstrate the working of // capacity() resize() and shrink_to_fit() #include    #include  // for string class using namespace std; // Driver Code int main() {  // Initializing string  string str = 'geeksforgeeks is for geeks';  // Displaying string  cout << 'The initial string is : ';  cout << str << endl;  // Resizing string using resize()  str.resize(13);  // Displaying string  cout << 'The string after resize operation is : ';  cout << str << endl;  // Displaying capacity of string  cout << 'The capacity of string is : ';  cout << str.capacity() << endl;  // Displaying length of the string  cout << 'The length of the string is :' << str.length()  << endl;  // Decreasing the capacity of string  // using shrink_to_fit()  str.shrink_to_fit();  // Displaying string  cout << 'The new capacity after shrinking is : ';  cout << str.capacity() << endl;  return 0; } 

Изход
The initial string is : geeksforgeeks is for geeks The string after resize operation is : geeksforgeeks The capacity of string is : 26 The length of the string is :13 The new capacity after shrinking is : 13

Времева сложност: O(1)



Космическа сложност: O(n) където n е размерът на низа

3) Итераторни функции

функцияОпределение
започвам ()Тази функция връща итератор в началото на низа.
край ()Тази функция връща итератор до следващия до края на низа.
rbegin()Тази функция връща обратен итератор, сочещ края на низа.
render()Тази функция връща обратен итератор, сочещ към предишното начало на низа.
cbegin()Тази функция връща постоянен итератор, сочещ към началото на низа, който не може да се използва за промяна на съдържанието, към което сочи.
няколко ()Тази функция връща постоянен итератор, сочещ към следващия край на низа, който не може да се използва за промяна на съдържанието, към което сочи.
crbegin()Тази функция връща постоянен обратен итератор, сочещ към края на низа, който не може да се използва за промяна на съдържанието, към което сочи.
crend()Тази функция връща постоянен обратен итератор, сочещ към предишното или началото на низа, той не може да се използва за промяна на съдържанието, към което сочи.

Алгоритъм:

  1. Декларирайте низ
  2. Опитайте се да итерирате низа, като използвате всички видове итератори
  3. Опитайте промяна на елемента от низа.
  4. Показване на всички повторения.

Пример:

CPP
// C++ Program to demonstrate the working of // begin() end() rbegin() rend() cbegin() cend() crbegin() crend() #include    #include  // for string class using namespace std; // Driver Code int main() {  // Initializing string`  string str = 'geeksforgeeks';  // Declaring iterator  std::string::iterator it;  // Declaring reverse iterator  std::string::reverse_iterator it1;  cout<<'Str:'<<str<<'n';  // Displaying string  cout << 'The string using forward iterators is : ';  for (it = str.begin(); it != str.end(); it++){  if(it == str.begin()) *it='G';  cout << *it;  }  cout << endl;  str = 'geeksforgeeks';  // Displaying reverse string  cout << 'The reverse string using reverse iterators is '  ': ';  for (it1 = str.rbegin(); it1 != str.rend(); it1++){  if(it1 == str.rbegin()) *it1='S';  cout << *it1;  }  cout << endl;    str = 'geeksforgeeks';  //Displaying String  cout<<'The string using constant forward iterator is :';  for(auto it2 = str.cbegin(); it2!=str.cend(); it2++){  //if(it2 == str.cbegin()) *it2='G';  //here modification is NOT Possible  //error: assignment of read-only location   //As it is a pointer to the const content but we can inc/dec-rement the iterator  cout<<*it2;  }  cout<<'n';    str = 'geeksforgeeks';  //Displaying String in reverse  cout<<'The reverse string using constant reverse iterator is :';  for(auto it3 = str.crbegin(); it3!=str.crend(); it3++){  //if(it2 == str.cbegin()) *it2='S';  //here modification is NOT Possible  //error: assignment of read-only location   //As it is a pointer to the const content but we can inc/dec-rement the iterator  cout<<*it3;  }  cout<<'n';  return 0; } //Code modified by Balakrishnan R (rbkraj000) 

Изход
Str:geeksforgeeks The string using forward iterators is : Geeksforgeeks The reverse string using reverse iterators is : Skeegrofskeeg The string using constant forward iterator is :geeksforgeeks The reverse string using constant reverse iterator is :skeegrofskeeg

Времева сложност: O(1)

Космическа сложност: O(n) където n е размерът на низа

4) Манипулиращи функции:

функцияОпределение
копиране ('char array' len pos) Тази функция копира подниза в целевия символен масив, споменат в нейните аргументи. Необходими са 3 аргумента дължина на целевия масив, за да се копира, и начална позиция в низа, за да започне копирането.
размяна ()Тази функция разменя един низ с друг

Пример:

линейно търсене в java
CPP
// C++ Program to demonstrate the working of // copy() and swap() #include    #include  // for string class using namespace std; // Driver Code int main() {  // Initializing 1st string  string str1 = 'geeksforgeeks is for geeks';  // Declaring 2nd string  string str2 = 'geeksforgeeks rocks';  // Declaring character array  char ch[80];  // using copy() to copy elements into char array  // copies 'geeksforgeeks'  str1.copy(ch 13 0);  // Displaying char array  cout << 'The new copied character array is : ';  cout << ch << endl;  // Displaying strings before swapping  cout << 'The 1st string before swapping is : ';  cout << str1 << endl;  cout << 'The 2nd string before swapping is : ';  cout << str2 << endl;  // using swap() to swap string content  str1.swap(str2);  // Displaying strings after swapping  cout << 'The 1st string after swapping is : ';  cout << str1 << endl;  cout << 'The 2nd string after swapping is : ';  cout << str2 << endl;  return 0; } 

Изход
The new copied character array is : geeksforgeeks The 1st string before swapping is : geeksforgeeks is for geeks The 2nd string before swapping is : geeksforgeeks rocks The 1st string after swapping is : geeksforgeeks rocks The 2nd string after swapping is : geeksforgeeks is for geeks


Трябва да се прочете: C++ String клас и неговите приложения