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() | Тази функция връща постоянен обратен итератор, сочещ към предишното или началото на низа, той не може да се използва за промяна на съдържанието, към което сочи. |
Алгоритъм:
- Декларирайте низ
- Опитайте се да итерирате низа, като използвате всички видове итератори
- Опитайте промяна на елемента от низа.
- Показване на всички повторения.
Пример:
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 аргумента дължина на целевия масив, за да се копира, и начална позиция в низа, за да започне копирането. |
| размяна () | Тази функция разменя един низ с друг |
Пример:
линейно търсене в javaCPP
// 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 клас и неговите приложения