What are Strings
The way a group of integers can be stored in an integer array, similarly a group of characters can be stored in a character array. Character arrays are many a time also called strings.
Character arrays or strings are used by programming languages to manipulate text
such as words and sentences.
A string constant is a one-dimensional array of characters terminated by a null ( ‘\0’ ).
For example, char name[ ] = { 'H', 'A', 'E', 'S', 'L', 'E', 'R', '\0' } ;
Each character in the array occupies one byte of memory and the last character is always ‘\0’. What character is this? It looks like two characters, but it is actually only
one character, with the \ indicating that what follows it is something special.
‘\0’ is called null character. Note that ‘\0’ and ‘0’ are not same.
The terminating null (‘\0’) is important, because it is the only way the functions that work with a string can know where the string ends.
main( )
{
char name[ ] = "Klinsman" ;
int i = 0 ;
while ( i <= 7 )
{
printf ( "%c", name[i] ) ;
i++ ;
}
}
And here is the output...
Klinsman
No big deal. We have initialized a character array, and then printed out the elements of this array within a while loop.
Can we write the while loop without using the final value 7?
We can; because we know that each character array always ends with a ‘\0’.
Following program illustrates this.
main( )
{
char name[ ] = "Klinsman" ;
int i = 0 ;
while ( name[i] != `\0' )
{
printf ( "%c", name[i] ) ;
i++ ;
}
}
And here is the output...
Klinsman
Even though there are so many ways (as shown above) to refer to the elements of a character array, rarely is any one of them used.
This is because printf( ) function has got a sweet and simple way of doing it, as shown below. Note that printf( ) doesn’t print the ‘\0’.
main( )
{
char name[ ] = "Klinsman" ;
printf ( "%s", name ) ;
}
The %s used in printf( ) is a format specification for printing out a string. The same specification can be used to receive a string from the keyboard, as shown below.
main( )
{
char name[25] ;
printf ( "Enter your name " ) ;
scanf ( "%s", name ) ;
printf ( "Hello %s!", name ) ;
}
And here is a sample run of the program...
Enter your name Ashish
Hello Ashish!
While entering the string using scanf( ) we must be cautious about two things:
(a)The length of the string should not exceed the dimension of the character array.
This is because the C compiler doesn’t perform bounds checking on character arrays.
Hence, if you carelessly exceed the bounds there is always a danger of overwriting something important, and in that event, you would have nobody to blame but yourselves.
(b)scanf( ) is not capable of receiving multi-word strings. Therefore names such as ‘Ashish Roy’ would be unacceptable. The way to get around this limitation is by using the function gets( ).
The usage of functions gets( ) and its counterpart puts( ) is shown below.
main( )
{
char name[25] ;
printf ( "Enter your full name " ) ;
gets ( name ) ;
puts ( "Hello!" ) ;
puts ( name ) ;
}
And here is the output...
Enter your name Ashish Roy
Hello!
Ashish Roy
The program and the output are self-explanatory except for the fact that, puts( ) can display only one string at a time (hence the use of two puts( ) in the program above).
Also, on displaying a string, unlike printf( ), puts( ) places the cursor on the next line.
Though gets( ) is capable of receiving only one string at a time, the plus point with
gets( ) is that it can receive a multi-word string.
Note :
'string.h' header file has to be includes to use the strings. Also note that this header file is not supported by old C IDE's like turbo c, for that you should have the latest version of C IDE.
Some commonly used Standard Library Functions :
Function Use
strlen - Finds length of a string
strlwr - Converts a string to lowercase
strupr - Converts a string to uppercase
strcat - Appends one string at the end of another
strncat - Appends first n characters of a string at the end of another
strcpy - Copies a string into another
strncpy - Copies first n characters of one string into another
strcmp - Compares two strings
strncmp - Compares first n characters of two strings
strcmpi - Compares two strings without regard to case
stricmp - Compares two strings without regard to case
Out of the above list we shall discuss the functions strlen( ), strcpy( ), strcat( ) and strcmp( ), since these are the mostcommonly used functions.
strlen( )
This function counts the number of characters present in a string.
Its usage is illustrated in the following program.
main( )
{
char arr[ ] = "System";
int len1, len2 ;
len1 = strlen ( arr ) ;
len2 = strlen ( "Humpty Dumpty" ) ;
printf ( "\nstring = %s length = %d", arr, len1 ) ;
printf ( "\nstring = %s length = %d", "Humpty Dumpty", len2 ) ;
}
The output would be...
string = System length = 6
string = Humpty Dumpty length = 13
Note that in the first call to the function strlen( ), we are passing the base address of the string, and the function in turn returns the length of the string. While calculating the length it doesn’t count ‘\0’.
Even in the second call,
len2 = strlen ( "Humpty Dumpty" ) ;
what gets passed to strlen( ) is the address of the string and not the string itself.
strcpy( )
This function copies the contents of one string into another. The base addresses of the source
and target strings should be supplied to this function.
Here is an example of strcpy( ) in action...
main( )
{
char source[ ] = "Sayonara" ;
char target[20] ;
strcpy ( target, source ) ;
printf ( "\nsource string = %s", source ) ;
printf ( "\ntarget string = %s", target ) ;
}
And here is the output...
source string = Sayonara
target string = Sayonara
On supplying the base addresses, strcpy( ) goes on copying the characters in source string into the target string till it doesn't encounter the end of source string (‘\0’).
It is our responsibility to see to it that the target string’s dimension is big enough to hold the string being copied into it. Thus, a string gets copied into another, piece-meal, character by character.
strcat( )
This function concatenates the source string at the end of the target string. For example, “Bombay” and “Nagpur” on concatenation would result into a string “BombayNagpur”.
Here is an example of strcat( ) at work.
main( )
{
char source[ ] = "Folks!" ;
char target[30] = "Hello" ;
strcat ( target, source ) ;
printf ( "\nsource string = %s", source ) ;
printf ( "\ntarget string = %s", target ) ;
}
And here is the output...
source string = Folks!
target string = HelloFolks!
strcmp( )
This is a function which compares two strings to find out whether they are same or different.
The two strings are compared character by character until there is a mismatch or end of one of the strings is reached, whichever occurs first. If the two strings are identical, strcmp( ) returns a value zero. If they’re not, it returns the numeric difference between the ASCII values of the first non-matching pairs of characters.
Here is a program which puts strcmp( ) in action.
main( )
{
char string1[ ] = "Jerry" ;
char string2[ ] = "Ferry" ;
int i, j, k ;
i = strcmp ( string1, "Jerry" ) ;
j = strcmp ( string1, string2 ) ;
k = strcmp ( string1, "Jerry boy" ) ;
printf ( "\n%d %d %d", i, j, k ) ;
}
And here is the output...
0 4 -32
In the first call to strcmp( ), the two strings are identical—“Jerry” and “Jerry”—and the value returned by strcmp( ) is zero.
In the second call, the first character of “Jerry” doesn't match with the first character of “Ferry” and the result is 4, which is the numeric difference between ASCII value of ‘J’ and ASCII value of ‘F’.
In the third call to strcmp( ) “Jerry” doesn’t match with “Jerry boy”, because the null character at the end of “Jerry” doesn’t match the blank in “Jerry boy”. The value returned is -32, which is the value of null character minus the ASCII value of space, i.e., ‘\0’ minus ‘ ’, which is equal to -32.
Prev NEXT
0 comments:
Post a Comment