Note on string(STL)
By Ujjal Roy
string
In C++, the Standard Template Library (STL) is a powerful library that provides a collection of template classes and functions to work with common data structures and algorithms. One of the fundamental components of the STL is the string class, which is used for working with strings of characters.
Declaration and initialization
The syntax of declaration and initialization of string below,
string name;
string s;//Initializing an empty string
string s1="Hello ujjal";//Initializing with a string literal
Accessing individual characters using the [] operator or at() method. It is possible to change element of string by [] this operator ,here the example
cout<<s1[0]<<" "<<s1[1]<<endl;
s1[0]='A';
s1[1]='B';
cout<<s1<<endl; //output : ABllo ujjal
String Append/Concatenation
By append() function we can concatenate two string. It takes a string as a parameter and return a new string. time complexity of Append() in string is O(n)
string s="Ujjal";
string s1="Roy";
string s3=s.append(s1);
cout<<s3<<endl;
instead of append() function The ‘+’ operator can be used to add strings together to make a new string. The character concatenation and string concatenation are the same process.
s="Ujjal";
s1="Roy";
s=s+' ';//"Ujjal ";
s+=s1;// "Ujjal Roy";
cout<<s<<endl;
size()/length()
the size() function return the size of the string. Also the length() function provide the total size of string. The time complexity of both function is constant time O(1).
string s="Hello HSTU";
cout<<s.size()<<endl;//output :10
cout<<s.length()<<endl;//output :10
string traversing
Traversing a string can be done using a variety of methods, similar to other sequential containers like arrays or vectors. Here are a few common approaches for traversing a for loop,while loop,do while loop,Iterator, For-each loop.
**Using for loop**
string s="Hello";
for(int i=0;i<s.size();i++)
{
cout<<s[i]<<" ";
} // output : H e l l o
Using For-each loop
for(auto it:s)cout<<it<<" ";// output: H e l l o
clear()
clear() is a member function of the string class in the Standard Template Library. It takes no parameters and it returns a string with zero characters (an empty string). The time complexity of the clear() function of the string class in C++ STL is O(1) in most cases.
string name="Hello coders";
name.clear();
cout<<name.size()<<endl;//output: 0
cout<<name<<endl;// output :
reverse()
reverse() function used for reverse a string. We need to provide the beginning and ending iterators of the string. This reverses the characters within the string, effectively reversing the entire string. The time complexity of the std::reverse() function in C++ STL is O(N),
string s="Ujjal";
reverse(s.begin(),s.end());
cout<<s<<endl; //output : lajjU
empty()
this is Boolean function Returns whether the string is empty if it is empty return true (1) otherwise false. the time complexity of this function is O (1).
string s="HSTU";
cout<<s.empty()<<endl;//output : 0
s.clear();
cout<<s.empty()<<endl;//output : 1
find()
Searches the string for the first occurrence of the sequence specified by its arguments. It return The position of the first character of the first match. If no matches were found, the function returns string::npos. The time complexity of find is O(n)
string s="Hello world";
cout<<s.find("ello")<<endl;
if(s.find("Hello")!=string::npos)cout<<"YES\n";
else cout<<"NO\n";
//output: 1
// YES
compare of two string
we can compare two strings using various methods depending on the specific comparison you want to perform. All the comparisons in O(N) times. We can use == operator for compare two string
string s1,s2;
s1="Ujjal";
s2="Ujjal";
if(s1==s2)cout<<"equal\n";
else cout<<"Not equal\n";
// output : equal
compare () is a public member function of string class. It compares the value of the string object (or a substring) to the sequence of characters specified by its arguments. Compare () returns an integer value rather than a Boolean value. Return 0 if both string are equal Return less than zero<0 if parameter string is greater Otherwise return greater than zero>0.
1. string s1,s2;
2. s1="Ujjal";
3. s2="Roy";
4. if(s1.compare(s2)<0)cout<<"s1 is less than s2\n";
5. else cout<<"s2 is less than s1\n";
Transform()
Here is the code for transform all character to lower case and upper case.
string s1="Ujjal";
string s2="Roy";
transform(s1.begin(),s1.end(),s1.begin(),::tolower);
cout<<s1<<endl;// output : ujjal
transform(s2.begin(),s2.end(),s2.begin(),::toupper);
cout<<s2<<endl;//output : ROY
User input of string
It is possible to use the extraction operator >> on cin to store a string entered by a user. cin considers a space (whitespace, tabs, etc) as a terminating character, which means that it can only store a single word.
string s;
cin>>s;
cout<<s<<endl;
input: Hello
output: Hello
for taking a line of input we can use getline it take two parameter as a input first cin and second string variable.
string s;
getline(cin,s);
cout<<s<<endl;
input : hello world.
Output: hello world.
After using cin to read data, there might be leftover newline characters or other formatting characters in the input buffer. This can lead to unexpected behavior when using getline subsequently. For solve this problem we use cin.ignore();
int n;
string s;
cin>>n;
cin.ignore();
getline(cin,s);
cout<<s<<endl;
input:
5
Hello World
Output: Hello World
erase()
erase() function erase the single element or a specific rang. It return an iterator referring to the character that now occupies the position of the first character erased, or end() if no such character exists. Time complexity of this function O(n).
string s="Hello ujjal";
s.erase();//Erase all character
cout<<s<<endl;//output :
s="Hello";
s.erase(2);//erase all element from poition 2(ZERO base index).
cout<<s<<endl; //output : He
s="Hello, Ujjal";
s.erase(2,4);//From index 2 and erase 4 characters(zero base)
cout<<s<<endl; //output : He Ujjal
s="Hello, Ujjal";
s.erase(s.begin()+5);// Erase the single character at iterator s.begin()+5
cout<<s<<endl;//output : Hello Ujjal
s="Hello, Ujjal";
s.erase(s.begin(),s.begin()+4);//erase the elements from begin() to
before begin()+4
cout<<s<<endl;// output: o, Ujjal
string s="Hello, coders";
s.erase(remove(s.begin(),s.end(),'o'),s.end());//erase all 'o' from s
cout<<s<<endl;// output : Hell, cders
Sorting of string
sort() is a built-in function in C++'s Standard Template Library. The function takes in a beginning iterator, an ending iterator, and (by default) sorts the iterable in ascending order. The function can also be used for custom sorting by passing greater comparator function or reverse iterator. Time complexity of this function is O(NlogN).
Sort by ascending order
string s ="Ujjal";
sort(s.begin(),s.end());
cout<<s<<endl;//output : Uajjl
sort by descending order
string s ="Ujjal";
sort(s.rbegin(),s.rend());
cout<<s<<endl;//output : ljjaU