07 Strings
07 Strings
Strings
2
Strings
Outline
• Character constant
– Integer value represented as character in single quotes
– 'z' is integer value of z
• 122 in ASCII
• String
– Series of characters treated as single unit
– Can include letters, digits, special characters +, -, * ...
– String literal (string constants)
• Enclosed in double quotes, for example:
"I like C++"
– Array of characters, ends with null character '\0'
– String is constant pointer
• Pointer to string’s first character
– Like arrays
4
• String assignment
– Character array
• char color[] = "blue";
– Creates 5 element char array color
• last element is '\0'
– Variable of type char *
• char *colorPtr = "blue";
– Creates pointer colorPtr to letter b in string “blue”
• “blue” somewhere in memory
– Alternative for character array
• char color[] = { ‘b’, ‘l’, ‘u’, ‘e’, ‘\0’ };
5
• cin.getline
– Read line of text
– cin.getline( array, size, delimiter );
– Copies input into specified array until either
• One less than size is reached
• delimiter character is input
– Example
char sentence[ 80 ];
cin.getline( sentence, 80, '\n' );
7
(2) String Manipulation Functions of the String-
handling Library
• String handling library <cstring> provides
functions to
– Manipulate string data
– Compare strings
– Search strings for characters and other strings
– Tokenize strings (separate strings into logical pieces)
8
(2) String Manipulation Functions of the String-
handling Library
char *strcpy( char *s1, const Copies the string s2 into the character
char *s2 ); array s1. The value of s1 is returned.
char *strncpy( char *s1, const Copies at most n characters of the string s2
char *s2, size_t n ); into the character array s1. The value of s1 is
returned.
char *strcat( char *s1, const Appends the string s2 to the string s1. The
char *s2 ); first character of s2 overwrites the terminating
null character of s1. The value of s1 is
returned.
char *strncat( char *s1, const Appends at most n characters of string s2 to
char *s2, size_t n ); string s1. The first character of s2 overwrites
the terminating null character of s1. The value
of s1 is returned.
int strcmp( const char *s1, Compares the string s1 with the string s2. The
const char *s2 ); function returns a value of zero, less than zero
or greater than zero if s1 is equal to, less than
or greater than s2, respectively.
9
(2) String Manipulation Functions of the String-
handling Library
int strncmp( const char *s1, const Compares up to n characters of the string
char *s2, size_t n ); s1 with the string s2. The function returns
zero, less than zero or greater than zero if
s1 is equal to, less than or greater than s2,
respectively.
char *strtok( char *s1, const char A sequence of calls to strtok breaks
*s2 ); string s1 into “tokens”—logical pieces
such as words in a line of text—delimited
by characters contained in string s2. The
first call contains s1 as the first argument,
and subsequent calls to continue tokenizing
the same string contain NULL as the first
argument. A pointer to the current token is
returned by each call. If there are no more
tokens when the function is called, NULL is
returned.
fig05_32.cpp
output (1 of 1)
13
(2) String Manipulation Functions of the String-
handling Library
• Copying strings
– char *strcpy( char *s1, const char *s2 )
• Copies second argument into first argument
– First argument must be large enough to store string and
terminating null character
– char *strncpy( char *s1, const char *s2,
size_t n )
• Specifies number of characters to be copied from string into
array
• Does not necessarily copy terminating null character
14
1 // Fig. 28: fig05_28.cpp
2 // Using strcpy and strncpy.
Outline
3 #include <iostream>
4
5 using std::cout; <cstring> contains fig05_28.cpp
6 using std::endl; prototypes for strcpy and (1 of 2)
7 strncpy.
8 #include <cstring> // prototypes for strcpy and strncpy
9
10 int main()
11 {
12 char x[] = "Happy Birthday to You";
13 char y[ 25 ]; Copy entire string in array x
14 char z[ 15 ]; into array y.
15
16 strcpy( y, x ); // copy contents of x into y
17
18 cout << "The string in array x is: " << x
19 << "\nThe string in array y is: " Copy first'\n';
<< y << 14 characters of
20 array x into array
21
Append
// copy first 14 characters of x into z
terminating nully. Note that
this does not write terminating
22 strncpy( z, x, 14 ); // does not character.
copy null character
23 z[ 14 ] = '\0';
null character.
// append '\0' to z's contents
24
25 cout << "The string in array z is: " << z << endl;
15
26
27 return 0; // indicates successful termination
Outline
28 String to copy.
29 } // end main Copied string using strcpy.
Copied first 14fig05_28.cpp
characters
The string in array x is: Happy Birthday to You using strncpy. (2 of 2)
The string in array y is: Happy Birthday to You
The string in array z is: Happy Birthday fig05_28.cpp
output (1 of 1)
16
(2) String Manipulation Functions of the String-
handling Library
• Concatenating strings
– char *strcat( char *s1, const char *s2 )
• Appends second argument to first argument
• First character of second argument replaces null character
terminating first argument
• Ensure first argument large enough to store concatenated result
and null character
– char *strncat( char *s1, const char *s2,
size_t n )
• Appends specified number of characters from second
argument to first argument
• Appends terminating null character to result
17
1 // Fig. 29: fig05_29.cpp
2 // Using strcat and strncat.
Outline
3 #include <iostream>
4
5 using std::cout; <cstring> contains fig05_29.cpp
6 using std::endl; prototypes for strcat and (1 of 2)
7 strncat.
8 #include <cstring> // prototypes for strcat and strncat
9
10 int main()
11 {
12 char s1[ 20 ] = "Happy ";
13 char s2[] = "New Year ";
14 char s3[ 40 ] = "";
15 Append s2 to s1.
16 cout << "s1 = " << s1 << "\ns2 = " << s2;
17
18 strcat( s1, s2 ); // concatenate s2 to s1
19
20 cout << "\n\nAfter strcat(s1, s2):\ns1 = " << s1
21 << "\ns2 = " << s2; Append first 6 characters of
22
s1 to s3.
23 // concatenate first 6 characters of s1 to s3
24 strncat( s3, s1, 6 ); // places '\0' after last character
25
18
26 cout << "\n\nAfter strncat(s3, s1, 6):\ns1 = " << s1
27 << "\ns3 = " << s3; Append s1 to s3. Outline
28
29 strcat( s3, s1 ); // concatenate s1 to s3
30 cout << "\n\nAfter strcat(s3, s1):\ns1 = " << s1
fig05_29.cpp
31 << "\ns3 = " << s3 << endl; (2 of 2)
32
33 return 0; // indicates successful termination fig05_29.cpp
34 output (1 of 1)
35 } // end main
s1 = Happy
s2 = New Year
strcmp(s1, s2) = 0
strcmp(s1, s3) = 1
strcmp(s3, s1) = -1
strncmp(s1, s3, 6) = 0
strncmp(s1, s3, 7) = 1
strncmp(s3, s1, 7) = -1
23
(2) String Manipulation Functions of the String-
handling Library
• Tokenizing
– Breaking strings into tokens, separated by delimiting
characters
– Tokens usually logical units, such as words (separated by
spaces)
– "This is my string" has 4 word tokens (separated
by spaces)
– char *strtok( char *s1, const char *s2 )
• Multiple calls required
– First call contains two arguments, string to be tokenized
and string containing delimiting characters
• Finds next delimiting character and replaces with null
character
– Subsequent calls continue tokenizing
• Call with first argument NULL
24
1 // Fig. 31: fig05_31.cpp
2 // Using strtok.
Outline
3 #include <iostream>
4
5 using std::cout; <cstring> contains fig05_31.cpp
6 using std::endl; prototype for strtok. (1 of 2)
7
8 #include <cstring> // prototype for strtok
9
10 int main()
11 {
12 char sentence[] = "This is a sentence with 7 tokens";
13 char *tokenPtr;
14
15 cout << "The string to be tokenized is:\n" << sentence
16 First call to strtok begins
<< "\n\nThe tokens are:\n\n";
17 tokenization.
18 // begin tokenization of sentence
19 tokenPtr = strtok( sentence, " " );
20
Outline
25
21 // continue tokenizing sentence until tokenPtr becomes NULL
22 while ( tokenPtr != NULL ) {
23 cout << tokenPtr << '\n';
24 tokenPtr = strtok( NULL, " " ); // get next token
25
26 } // end while
27
28 cout << "\nAfter strtok, sentence = " << sentence << endl;
29
30 return 0; // indicates successful termination fig05_31.cpp
31
(2 of 2)
32 } // end main