IIE, KUK
Lecture 3-7
Unit 3 C - Programming Language
Pardeep Kumar Institute of Instrumentation Engineering Kurukshetra University Kurukshetra 136119.
Course:-
IIE, KUK
Pointers: fundamentals of pointers, declaration of pointer, passing pointer to a function, one and multidimensional pointers their usage and applications. Strings: strings literals, string variables, I/O of strings, arrays of strings; applications.
Pardeep Kumar 22/2/2010
What Is a String?
printf("This is a string.");
IIE, KUK
printf("This is on\ntwo lines!");
printf("For \" you write \\\".");
Pardeep Kumar 22/2/2010
Example:
/* Program: Displaying a string */ #include <stdio.h> int main(void) { printf("The character \0 is used to terminate a string."); return 0; } If you compile and run this program, youll get this output: The character
IIE, KUK
Pardeep Kumar 22/2/2010
String- and Text-Handling Methods
char saying[20]; char saying[] = "This is a string."; char str[40] = "To be"; const char message[] = "The end of the world is nigh"; printf("\nThe message is: %s", message);
IIE, KUK
/* Program: Lengths of strings */ #include <stdio.h> int main(void) { char str1[] = "To be or not to be"; char str2[] = ",that is the question"; int count = 0; /* Stores the string length */ while (str1[count] != '\0') /* Increment count till we reach the string */ count++; /* terminating character. */ printf("\nThe length of the string \"%s\" is %d characters.", str1, count); count = 0; /* Reset to zero for next string */ while (str2[count] != '\0') /* Count characters in second string */ count++; printf("\nThe length of the string \"%s\" is %d characters.\n", str2, count); return 0; } The output you will get from this program is the following: The length of the string "To be or not to be" is 18 characters. The length of the string ",that is the question" is 21 characters.
Pardeep Kumar 22/2/2010
Operations with Strings
Appending a String
IIE, KUK
Joining one string to the end of another is a common requirement. For instance, you might want to assemble a single message from two or more strings. You might define the error messages in a program as a few basic text strings to which you append one of a variety of strings to make the message specific to a particular error. Lets see how this works in the context of an example.
Pardeep Kumar 22/2/2010
Example
/* Program : Joining strings */ #include <stdio.h> int main(void) { char str1[40] = "To be or not to be"; char str2[] = ",that is the question"; int count1 = 0; /* Length of str1 */ int count2 = 0; /* Length of str2 */ /* find the length of the first string */ while (str1[count1] ) /* Increment count till we reach the string */ count1++; /* terminating character. */ /* Find the length of the second string */ while (str2[count2]) /* Count characters in second string */ count2++; /* Check that we have enough space for both strings */ if(sizeof str1 < count1 + count2 + 1) printf("\nYou can't put a football into a tennis ball."); else { /* Copy 2nd string to end of the first */ count2 = 0; /* Reset index for str2 to 0 */ while(str2[count2]) /* Copy up to null from str2 */ str1[count1++] = str2[count2++]; str1[count1] = '\0'; /* Make sure we add terminator */ printf("\n%s\n", str1 ); /* Output combined string */ } return 0; } The output from this program will be the following: To be or not to be, that is the question
IIE, KUK
Pardeep Kumar 22/2/2010
Arrays of Strings
char sayings[3][32] = {"Manners make the man.", "Many hands make light work.", "Too many cooks spoil the broth." }; char sayings[][32] = {"Manners make the man.", "Many hands make light work.", "Too many cooks spoil the broth." }; for(int i = 0 ; i<3 ; i++) printf("\n%s", sayings[i]);
IIE, KUK
Pardeep Kumar 22/2/2010
Example revisited
/* Program : Arrays of strings */ #include <stdio.h> int main(void) { char str[][40] = { "To be or not to be" ; ", that is the question" }; int count[] = {0, 0}; /* Lengths of strings */ /* find the lengths of the strings */ for(int i = 0 ; i<2 ; i++) while (str[i][count[i]]) count[i]++; /* Check that we have enough space for both strings */ if(sizeof str[0] < count[0] + count[1] + 1) printf("\n You can't put a football into a tennis ball."); else { /* Copy 2nd string to first */ count[1] = 0; while((str[0][count[0]++] = str[1][count[1]++])); printf("\n%s\n", str[0]); /* Output combined string */ } return 0; } Typical output from this program is the following: To be or not to be, that is the question Pardeep Kumar 22/2/2010
IIE, KUK
String Library Functions
#include <string.h> strcpy(string1, string2); if(sizeof(string2) <= sizeof (string1)) strcpy(string1, string2); char destination[] = "This string will be replaced"; char source[] = "This string will be copied in part"; size_t n = 26; /* Number of characters to be copied */ strncpy(destination, source, n);
IIE, KUK
String Length Using a Library Function
while (str2[count2]) count2++; Instead of this, you could simply write this: count2 = strlen(str2);
Pardeep Kumar 22/2/2010
10
Library Function
Joining Strings Using a Library Function
count2 = 0; while(str2[count2]) str1[count1++] = str2[count2++]; str1[count1] = '\0'; the following exceedingly simple statement: strcat(str1, str2); /* Copy str2 to the end of str1 */ strncat(str1, str2, 5); /* Copy 1st 5 characters of str2 to the end of str1 */ size_t length = 0; length = strlen(strncat(str1, str2, 5));
IIE, KUK
Pardeep Kumar 22/2/2010
11
Example
/* Program : Joining strings - revitalized */ #include <stdio.h> #include <string.h> #define STR_LENGTH 40 int main(void) { char str1[STR_LENGTH] = "To be or not to be"; char str2[STR_LENGTH] = ",that is the question"; if(STR_LENGTH > strlen(str1) + strlen(str2)) /* Enough space ? */ printf("\n%s\n", strcat(str1, str2)); /* yes, so display joined string */ else printf("\n You can't put a football into a tennis ball."); return 0; } Typical output from this program is the following: To be or not to be, that is the question
IIE, KUK
Pardeep Kumar 22/2/2010
12
Comparing Strings
The string library also provides functions for comparing strings and deciding whether one string is greater than or less than another.
IIE, KUK
Pardeep Kumar 22/2/2010
13
Demonstration:
/* Program : Comparing strings */ #include <stdio.h> #include <string.h> int main(void) { char word1[20]; /* Stores the first word */ char word2[20]; /* Stores the second word */ printf("\nType in the first word (less than 20 characters):\n1: "); scanf("%19s", word1); /* Read the first word */ printf("Type in the second word (less than 20 characters):\n 2: "); scanf("%19s", word2); /* Read the second word */ /* Compare the two words */ if(strcmp(word1,word2) == 0) printf("You have entered identical words"); else printf("%s precedes %s", (strcmp(word1, word2) < 0) ? word1 : word2, (strcmp(word1, word2) < 0) ? word2 : word1); return 0; } The output looks something like this:
IIE, KUK
Type in the first word (less than 20 characters): 1: apple Type in the second word (less than 20 characters): 2: banana apple precedes banana Pardeep Kumar 22/2/2010 14
Searching a String
The <string.h> header file declares several string-searching functions,
IIE, KUK
strchr() function can be used to achieve this char str[] = "The quick brown fox"; /* The string to be searched */ char c = 'q'; /* The character we are looking for */ char *pGot_char = NULL; /* Pointer initialized to zero */ pGot_char = strchr(str, c); /* Stores address where c is found */ printf("Character found was %c.", *pGot_char);
Pardeep Kumar 22/2/2010
15
Searching a String for a Substring
strstr() function is probably the most useful of all the searching functions declared in string.h. char text[] = "Every dog has his day"; char word[] = "dog"; char *pFound = NULL; pFound = strstr(text, word);
IIE, KUK
Analyzing and Transforming Strings
Function islower() isupper() isalpha() isalnum() iscntrl() isprint() isgraph() isdigit() isxdigit() isblank() isspace() ispunct()
Pardeep Kumar 22/2/2010
Tests For Lowercase letter Uppercase letter Uppercase or lowercase letter Uppercase or lowercase letter or a digit Control character Any printing character including space Any printing character except space Decimal digit ('0' to '9') Hexadecimal digit ('0' to '9', 'A' to 'F', 'a' to 'f') Standard blank characters (space, '\t') Whitespace character (space, '\n', '\t', '\v', '\r', '\f') Printing character for which isspace() and isalnum() return false
16
Convert Strings to Numerical Values
Function atof() atoi() atol() atoll() Returns A value of type double that is produced from the string argument A value of type int that is produced from the string argument A value of type long that is produced from the string argument A value of type long long that is produced from the string argument
IIE, KUK
Pardeep Kumar 22/2/2010
17
IIE, KUK
Thanks
Pardeep Kumar 22/2/2010
18