Strings Topics • String Libraries • String Operations • Sample Program Reading • Sections 8.1 - 8.7 CMSC 104, Version 8/06 L25Strings.ppt 1 String • A string is a character array that has a marker to show where the data ends, when the array is larger than the data. char firstname[ 50 ] = “Sue”; • The array firstname is 50 characters long, but the data is only four characters long. You must count the marker. • The marker is character that is set to the number zero. (Sometimes called a null terminator.) CMSC 104, Version 8/06 L25Strings.ppt 2 Array Constraint • There are now built-in operators to manipulate arrays, except to initialize them when you declare the array: char firstname[ 50 ] = “Sue”; CMSC 104, Version 8/06 L25Strings.ppt 3 Missing Operators • There is no string assignment operators. • There are not string comparison operators. • There are not string combination operators. • However, there are built-in functions to do this common tasks. CMSC 104, Version 8/06 L25Strings.ppt 4 Built-in String Functions • String assignment: strcpy( destination, source ) char name[ 25 ]; /* contains nothing */ strcpy( name, “Hilton” ); /* name now contains “Hilton” */ CMSC 104, Version 8/06 L25Strings.ppt 5 Built-in String Functions (cont’d) • String comparison: strcmp( strA, strB ); If strA comes after strB, the function returns a positive number. o Is strB comes last, the function returns a negative number. o If strA and strB are the same thing, the function returns a zero. result = strcmp( “CMSC”, “IFSM” ); /* negative */ result = strcmp( “IFSM”, “CMSC” ); /* positive */ result = strcmp( “CSMC”, “CMSC” ); /* zero */ o CMSC 104, Version 8/06 L25Strings.ppt 6 Built-in String Functions (cont’d) • String combination: strcat( destination, source ) o o The source is not changed. The destination contain exactly what it had before plus what was in the source. Nothing else is added. NOTE: If you are combining a first name and last name for a full name, you must use another strcat to add the space between them: strcpy( fullName, firstName); strcat( fullName, “ “ ); strcat( fullName, lastName ); CMSC 104, Version 8/06 L25Strings.ppt 7 Built-in String Functions (cont’d) • Extracting words (tokens) from a string: /* get the first token (delimited by a blank) */ printf( "%s\n", strtok( b, " " ) ); /* This is more useful after you learn to use pointers. */ CMSC 104, Version 8/06 L25Strings.ppt 8 Built-in String Functions (cont’d) • What if I want to get a menu choice, that is the numbers 1 to 4 or the char ‘q’? Use getchar( ) to get the menu choice, check for ‘q’ and if it is not, then convert it to a number. /* convert a string (ASCII) to an integer */ printf( "%d\n", atoi( "1234" ) ); /* convert a string (ASCII) to a float */ printf( "%f\n", atof( "1234.5678" ) ); CMSC 104, Version 8/06 L25Strings.ppt 9 Built-in String Functions (cont’d) • How long is the data in the string (not counting the null terminator)? stringSize = strlen( strA ); CMSC 104, Version 8/06 L25Strings.ppt 10 String Libraries #include files: #include <stdlib.h> /* needed by atoi( ) and atof( ) */ #include <string.h> /* needed by str...( ) functions */ CMSC 104, Version 8/06 L25Strings.ppt 11 Sample Program #include <stdio.h> #include <stdlib.h> /* needed by atoi( ) and atof( ) */ #include <string.h> /* needed by str...( ) functions */ CMSC 104, Version 8/06 L25Strings.ppt 12 Sample Program (cont’d) int main( void ) { char a[ 100 ] = "Excellence"; char b[ 100 ]; char c[ 100 ] = "Failure"; int result; CMSC 104, Version 8/06 L25Strings.ppt 13 Sample Program (cont’d) /* Make sure the array a is as expected */ printf( "string a is >%s<\n", a ); /* assign a to b */ strcpy( b, a ); printf( "After strcpy(b, a), string b is now >%s<\n", b ); CMSC 104, Version 8/06 L25Strings.ppt 14 Sample Program (cont’d) printf( "\n=============\nString b = >%s< and is %d characters long\n", b, strlen( b ) ); /* put in a space and add the array a to what is in array a */ strcat ( b, " " ); printf( "After strcat(b, \" \"), string b = >%s< and is %d characters long\n", b, strlen( b ) ); strcat ( b, a ); printf( "After strcat(b, a), string b = >%s< and is %d characters long\n", b, strlen( b ) ); CMSC 104, Version 8/06 L25Strings.ppt 15 Sample Program (cont’d) /* get the first token (delimited by a blank) */ printf( "strtok( b, \" \" ) gives %s\n", strtok( b, " " ) ); printf( "\n=============\n"); printf( "string a = %s string c = %s\n", a, c ); /* "Excellence" comes before "Failure", so print a negative number */ printf( "strcmp( a, c ) gives %d\n", strcmp( a, c ) ); CMSC 104, Version 8/06 L25Strings.ppt 16 Sample Program (cont’d) /* " Failure " comes before “Excellence ", so print a positive number */ printf( "strcmp( c, a ) gives %d\n", strcmp( c, a ) ); /* "Excellence" is the same as "Excellence", so print zero */ printf( "strcmp( a, \"Excellence\" gives %d\n", strcmp( a, "Excellence" ) ); CMSC 104, Version 8/06 L25Strings.ppt 17 Sample Program (cont’d) result = strcmp( "CMSC", "IFSM" ); /* negative */ printf( "After strcmp( \"CMSC\", \"IFSM\" ), result is %d\n", result); result = strcmp( "IFSM", "CMSC" ); /* positive */ printf( "After strcmp( \"IFSM\", \"CMSC\" ), result is %d\n", result); result = strcmp( "CMSC", "CMSC" ); /* zero */ printf( "After strcmp( \"CMSC\", \"CMSC\" ), result is %d\n", result); CMSC 104, Version 8/06 L25Strings.ppt 18 Sample Program (cont’d) printf( "\n=============\n"); /* convert a string to an integer */ printf( "atoi( \"1234\" gives %d\n", atoi( "1234" ) ); /* convert a string to a float */ printf( "atof( \"1234.5678\" ) gives %f\n", atof( "1234.5678" ) ); return 0; } CMSC 104, Version 8/06 L25Strings.ppt 19 Sample Program Output string a is >Excellence< After strcpy(b, a), string b is now >Excellence< ============= String b = >Excellence< and is 10 characters long After strcat(b, " "), string b = >Excellence < and is 11 characters long After strcat(b, a), string b = >Excellence Excellence< and is 21 characters long strtok( b, " " ) gives Excellence CMSC 104, Version 8/06 L25Strings.ppt 20 Sample Program Output (cont’d) ============= string a = Excellence string c = Failure strcmp( a, c ) gives -1 strcmp( c, a ) gives 1 strcmp( a, "Excellence" gives 0 After strcmp( "CMSC", "IFSM" ), result is -1 After strcmp( "IFSM", "CMSC" ), result is 1 After strcmp( "CMSC", "CMSC" ), result is 0 CMSC 104, Version 8/06 L25Strings.ppt 21 Sample Program Output (cont’d) ============= atoi( "1234" gives 1234 atof( "1234.5678" ) gives 1234.567800 CMSC 104, Version 8/06 L25Strings.ppt 22