Module1 F Cstyle String
Module1 F Cstyle String
C++ Strings
1
TCP1231 Computer Programming I
Objectives
▪ Understand the basic types of strings.
▪ Define and use the string class and C-type
strings.
▪ Read and write strings.
▪ Access and manipulate characters or sub-
strings within a string.
▪ Concatenate and compare strings.
▪ Insert, replace, swap, or erase a sub-string in
a string.
2
TCP1231 Computer Programming I
String Taxonomy
3
TCP1231 Computer Programming I
String Formats
4
TCP1231 Computer Programming I
The Standard string Class
▪ The string class allows the programmer to
treat strings as a basic data type
▪ No need to deal with the implementation as with
C-strings
▪ The string class is defined in the string library
and the names are in the standard
namespace
▪ To use the string class you need these lines:
#include <string>
using namespace std;
5
TCP1231 Computer Programming I
C++ String
Notes
6
TCP1231 Computer Programming I
string Constructors
▪ The default string constructor initializes the
string to the empty string
▪ Another string constructor takes a C-string
argument
▪ Example:
string phrase; // empty string
string noun("ants"); // a string version
//
of "ants"
7
TCP1231 Computer Programming I
#include <iostream>
#include <iomanip>
#include <string> Demonstrate
String
using namespace std;
int main ()
{
string s1;
string s2 ("Hello World");
Constructors
string s3 (s2);
string s4 (5, 'A');
string s5 (s2, 6);
string s6 ("Hello", 2);
string s7 ("Hello", 3, 2); Value of s1:
Value of s2: Hello World
cout << "Value of s1: " << s1 << endl;
Value of s3: Hello World
cout << "Value of s2: " << s2 << endl;
cout << "Value of s3: " << s3 << endl; Value of s4: AAAAA
cout << "Value of s4: " << s4 << endl; Value of s5: World
cout << "Value of s5: " << s5 << endl; Value of s6: He
cout << "Value of s6: " << s6 << endl; Value of s7: lo
cout << "Value of s7: " << s7 << endl;
return 0;
} // main
8
TCP1231 Computer Programming I
string class in C++ Standard Library
#include <iostream>
#include <string>
using namespace std;
int main() {
char cstr[] = "Hi";
string s1,s2;
10
TCP1231 Computer Programming I
When assigning string to a c++ string,
#include <iostream> we do not need to worry about whether
#include <string>
there is enough memory allocated or
using namespace std;
not, the string will automatically adjust
int main() { its size if there is not enough memory
char cstr[] = "Arnold"; allocated.
string s1,s2,s3;
11
TCP1231 Computer Programming I
String
#include <iostream>
#include <string>
using namespace std;
int main ()
Assignment
{
string str1 ("String 1");
string str2;
string str3;
string str4;
string str5 = "String 5";
13
TCP1231 Computer Programming I
getline and Type string
▪ A getline function exists to read entire lines
into a string variable
▪ This version of getline is not a member of the
istream class, it is a non-member function
▪ Syntax for using this getline is different than that
used with cin: cin.getline(…)
▪ Syntax for using getline with string objects:
getline(Istream_Object, String_Object);
14
TCP1231 Computer Programming I
getline Example
▪ This code demonstrates the use of getline with
string objects
▪ string line;
cout "Enter a line of input:\n";
getline(cin, line);
cout << line << "END OF OUTPUT\n";
15
TCP1231 Computer Programming I
#include <iostream>
#include <string>
getline
similar to the cin.getline() function to read
using namespace std;
int main() {
characters into C-string from user, however,
string s; for the C++-string, the cin is one of the
parameter of the getline() function.
cout << "=> ";
cin >> s;
cin.ignore(1000,'\n');
cout << s << endl;
16
TCP1231 Computer Programming I
getline
#include <iostream>
#include <iomanip>
#include <string>
#include <conio.c>
using namespace std;
int main ()
{
cout << "Enter Your Name in the form lastname,firstname: ";
string lName;
string fName;
getline (cin, lName, ',');
getline (cin, fName);
cout << "Your Name is: " << fName << " " << lName;
getch();
return 0;
} // main
17
TCP1231 Computer Programming I
More Examples
#include <iostream> #include <iostream>
#include <string> #include <string>
#include <conio.c> #include <conio.c>
using namespace std; using namespace std;
18
TCP1231 Computer Programming I
ignore
▪ ignore is a member of the istream class
▪ ignore can be used to read and discard all the
characters, including '\n' that remain in a line
▪ Ignore takes two arguments
▪ First, the maximum number of characters to discard
▪ Second, the character that stops reading and
discarding
▪ Example: cin.ignore(1000, '\n');
reads up to 1000 characters or to '\n'
19
TCP1231 Computer Programming I
String Processing
▪ The string class allows the same operations
we used with C-strings…and more
▪ Characters in a string object can be accessed as
if they are in an array
▪ last_name[i] provides access to a single character
as in an array
▪ Index values are not checked for validity!
20
TCP1231 Computer Programming I
Member Function at
▪ at is an alternative to using [ ]'s to access
characters in a string.
▪ at checks for valid index values
▪ Example: string str("Mary");
cout << str[6] << endl;
cout << str.at(6) << endl;
str[2] = 'X';
str.at(2) = 'X';
21
TCP1231 Computer Programming I
Member Function length
▪ Example:
int n = string_var.length( );
22
TCP1231 Computer Programming I
Comparison of strings
▪ Comparison operators work with string
objects
▪ Objects are compared using lexicographic order
(Alphabetical ordering using the order of symbols
in the ASCII character set.)
▪ = = returns true if two string objects contain the
same characters in the same order
▪ Remember strcmp for C-strings?
▪ <, >, <=, >= can be used to compare string
objects
23
TCP1231 Computer Programming I
#include <iostream>
#include <string>
String
using namespace std;
int main () {
string str1 ("ABC Company");
string str2 ("ABC");
Comparisons
string str3 ("ABC");
if (str1 == str2)
cout << "str1 == str2" << endl;
if (str1 > str2)
cout << "str1 > str2" << endl;
if (str2 == str3)
cout << "str2 == str3" << endl; str1 > str2
str2 == str3
return 0;
} // main
24
TCP1231 Computer Programming I
Using + With strings
(Concatenation)
▪ Variables of type string can be concatenated
with the + operator
▪ Example: string s1, s2, s3;
…
s3 = s1 + s2;
▪ If s3 is not large enough to contain s1 + s2, more
space is allocated
▪ More specific, use append:
▪ append(string &str, size_t offset, size_t count);
▪ append(string &str);
▪ append(size_t count, char ch);
25
TCP1231 Computer Programming I
#include <iostream>
#include <string>
using namespace std;
String
int main () { Concatenation
string str1 = "This is ";
string str2 = "a string"; This is a string
string str3;
Begin append: This is a string
str3 = str1 + str2;
cout << str3 << endl; Append method: This is a string string
Append characters: This is a string!!!!!
cout << "\nBegin append: ";
str1 = str1 + str2; We can add/concatenate C++
cout << str1 << endl; strings, C-strings or characters
into a C++ string to form a new
str1.append(str2, 1, string::npos); C++ string using the '+' operator
cout << "Append method: " << str1 << endl; w i t hout n e e d i n g t o u s e t h e
strcat() functions as in C-string.
str3.append(5, '!'); The strcat() function can only
cout << "Append characters: " << str3; be used with C-strings.
return 0;
}
26
TCP1231 Computer Programming I
String Extraction
▪ Access the substring of the calling string
starting at position and having length
characters
▪ Format
str.substr(position, length);
27
TCP1231 Computer Programming I
#include <iostream>
#include <string>
using namespace std; String
int main () {
string str1 = "Concatenation";
Extraction
string str2;
str2 = str1.substr();
cout << "str2 ==> 1: " << str2 << endl;
str1 contains: Concatenation
str2 = str1.substr(5, 3);
cout << "str2 ==> 2: " << str2 << endl;
str2 contains:
0123456789012
str2 = str1.substr(5); str2 ==> 1: Concatenation
cout << "str2 ==> 3: " << str2 << endl;
return 0;
str2 ==> 2: ten
} str2 ==> 3: tenation
28
TCP1231 Computer Programming I
Find string
▪ Format
str.find(str1); returns index of the first occurrence
of str1 in str
str.find(str1, pos);
returns index of the first
occurrence of string str1
in str, the search starts at
position pos.
str.find_first_of(str1, pos);
returns index of the first
instance in str of
any character in str1, starting the search at
position pos.
str.find_first_not_of(str1, pos);
returns index of the first
instance in str of
any character not in str1, starting the
TCP1231 Computersearch at position
Programming I pos. 29
#include <iostream>
#include <string> Find
using namespace std;
int main ()
{
int where;
string str1 = "ccccatenatttt";
where = str1.find("ten");
cout << "\"ten\" at: " << where << endl;
where = str1.find("tin");
if (where != string::npos)
cout << "\"tin\" at: " << where << endl;
else
cout << "\"tin\" not at: " << where << endl;
"ten" at: 5
"tin" not at: -1
return 0;
}
Page 598
30
TCP1231 Computer Programming I
#include <iostream> Find
#include <string>
using namespace std; return the index of the first occurrence of string
int main() {
"be" within s1 starting from position 0.
string s1 = "...to be, or... not to
be!";
string s2 = "be"; return the index of the first occurrence of
string s3;
string "be" within s1 starting from position 8.
s3 = s1.substr(6,13);
cout << s3 << endl;
return 0;
} be, or... not
6
6
6
23
31
TCP1231 Computer Programming I
#include <iostream>
#include <string>
Find
using namespace std; returns the index of the
first instance in s1 of any
int main() { character in s2, starting
string s1 = "...to be, or... not to be!";
string s2 = "aeiou"; the search at position 11.
string s3 = ",.!";
4
17
returns the index of the first
3
instance in s1 of any character
15
NOT in s2, starting the search
at position 12.
32
TCP1231 Computer Programming I
Insert string
33
TCP1231 Computer Programming I
#include <iostream>
#include <string>
using namespace std; Insertion
int main ()
{
string str1 = "This is Test";
string str2 = "tell me if, are you sure";
cout << "str1 ==>0: " << str1 << endl;
35
TCP1231 Computer Programming I
#include <iostream>
#include <string> Replacement
using namespace std;
int main () {
string str1 = "My Name was Omar Ahmad";
string str2 = "My Last Name is Zaqaibeh";
str1.replace(8, 3, "is");
cout << "str1 ==>1: " << str1 << endl;
str1 ==>0: My Name was Omar Ahmad
str1 ==>1: My Name is Omar Ahmad
str1.replace(15, 6, str2, 15, 9);
str1 ==>2: My Name is Omar Zaqaibeh
cout << "str1 ==>2: " << str1 << endl;
str1 ==>3: What is Your Name?
str1.replace(0, str1.length(), "What is Your Name?");
cout << "str1 ==>3: " << str1 << endl;
return 0;
}
36
TCP1231 Computer Programming I
#include <iostream>
#include <string>
using namespace std; Erase,
Clear, and
int main () {
string str1 = "This is one string";
string str3;
cout << "str1 ==>0: " << str1 << endl; Empty
str3 = str1;
str1.erase();
cout << "str1 ==>1: " << str1 << endl; str1 ==>0: This is one string
if (str1.empty()) str1 ==>1:
cout <<"\n\tstr1 is empty \n\n";
str1 = str3; str1 is empty
str1.erase(8, 4);
cout << "str1 ==>2: " << str1 << endl;
str1 = str3; str1 ==>2: This is string
str1.clear(); str1 ==>3:
cout << "str1 ==>3: " << str1 << endl;
if (str1.empty()) str1 is empty
cout <<"\n\tstr1 is empty \n";
return 0;
} 37
TCP1231 Computer Programming I
Swap the two strings
▪ swap(str1, str2);
interchange the string str1 with str2
▪ Example:
▪ Before swapping
str1 = “Multimedia” str2 = “University”
▪ After swapping
str1 = “University” str2 = “Multimedia”
38
TCP1231 Computer Programming I
#include <iostream>
#include <string> Swap
#include <conio.c>
using namespace std;
int main ()
{
string str1 = "read then eat";
string str2 = "eat then sleep";
39
TCP1231 Computer Programming I
string Objects to C-strings
▪ Recall the automatic conversion from C-string
to string: char a_c_string[] = "C-string";
string_variable = a_c_string;
40
TCP1231 Computer Programming I
Converting strings to C-strings
▪ The string class member function c_str
returns the C-string version of a string object
▪ Example:
strcpy(a_c_string, string_variable.c_str( ) );
41
TCP1231 Computer Programming I
Conversion between C-string and C++ string
valid, assign a C-string to
char cstr[20] = "hello";
C++ string
string cppstr = "world";
cppstr = cstr;
Invalid, can not assign nor
cstr = cppstr; copy a C++-string to C
strcpy(cstr, cppstr); string.
strcpy(cstr, cppstr.c_str() );
valid, convert a C++-string to C
string (using the c_str()
cstr = cppstr.c_str() ; function) before it is being copy
into the C-string
Invalid, even though the C++-string has been convert to C-string, we can
not assign the new C-string into another C-string, we need to use the
strcpy() for that.
42
TCP1231 Computer Programming I
The End
43
TCP1231 Computer Programming I