SM 514 Introduction to Software Testing
Transkript
SM 514 Introduction to Software Testing
Strings Strings are multiple characters in a certain order “my car” “Please enter three integers” C allows variable types for single characters, but not for strings char type arrays are used to represent strings Strings in C are terminated by the null character, „\0‟ So the string “my car” Notice that space is counted as a character Need to add the null character to the end of the string Minimum length of array needed is 7 (including the null character) What is the minimum length of an array to store “Please enter three integers” ? 28 Dr. Sadık Eşmelioğlu CENG 114 – Spring 2009-10 127 Declaring and Initializing Strings Strings are declared as arrays of characters char FirstName[15]; char LastName[25]; Strings can also be defined as constants #define ERR1 “Date is wrong” #define ERR2 “Cannot Leave Name Field Blank” Strings can be initialized when they are declared char char char char Dr. Sadık Eşmelioğlu FirstName[15] = {S, a, d, i, k}; FirstName[15] = “Sadik”; LastName[25] = {E, s, m, e, l, i, o, g, l, u}; LastName[25] = “Esmelioglu”; CENG 114 – Spring 2009-10 128 64 Strings in Memory Problem char x[15] = “John Smith” x[0] x[1] x[2] x[3] x[4] x[5] x[6] x[7] x[8] x[9] x[10] x[11] x[12] x[13] x[14] w y z 7 0 0 0 J 7 0 0 1 o 7 0 0 2 h 7 0 0 3 n 7 0 0 4 7 0 0 5 S 7 0 0 6 m 7 0 0 7 i 7 0 0 8 t 7 0 0 9 h 7 0 1 0 \0 7 0 1 1 ? 7 0 1 2 ? 7 0 1 3 ? 7 0 1 4 ? 7 0 1 5 15 7 0 1 6 -1 7 0 1 7 23 char x[15] = “John Adam Smith” x[0] x[1] x[2] x[3] x[4] x[5] x[6] x[7] x[8] x[9] x[10] x[11] x[12] x[13] x[14] w y z 7 0 0 0 J 7 0 0 1 o 7 0 0 2 h 7 0 0 3 n 7 0 0 4 7 0 0 5 A 7 0 0 6 d 7 0 0 7 a 7 0 0 8 m 7 0 0 9 7 0 1 0 S 7 0 1 1 m 7 0 1 2 i 7 0 1 3 t 7 0 1 4 h 7 0 1 5 \0 7 0 1 6 -1 7 0 1 7 23 Length of the string should be one less than the array size Dr. Sadık Eşmelioğlu CENG 114 – Spring 2009-10 129 Arrays of Strings Strings are arrays of characters single dimensional arrays Lists are arrays of strings two dimensional arrays Players Ahmet Hasan Naciye Ayse Nuri This list can be represented as a two dimensional array (5 rows, ? columns) char Players[5][7] = {“Ahmet”, “Hasan”, “Naciye”, “Ayse”, “Nuri”} Dr. Sadık Eşmelioğlu CENG 114 – Spring 2009-10 130 65 Storing in Memory Player[0] &Player[0][0] Player Player[0] Player[1] 7000 7001 7002 7003 7004 7005 7006 7007 7008 7009 7010 7011 7012 7013 A h m e t \0 H a s a n \0 Player[2] Player[3] Dr. Sadık Eşmelioğlu All have a value of 7000 7014 7015 7016 7017 7018 7019 7020 7021 7022 7023 7024 7025 7026 7027 N a c i y e \0 A y s e \0 CENG 114 – Spring 2009-10 Player[4] 7028 7029 7030 7031 7032 7033 7034 7035 7036 7037 7038 7039 7040 7041 N u r i \0 131 Printing Strings Use printf and scanf %s is the placeholder for strings example printf(“%s”, “This is a book”); prints >This is a boo k printf(“%s*%s”, “123456”, “123”); prints >123456*123 printf(“%8s*%5s”, “12345”, “123”); prints > 12345* 12 3 Dr. Sadık Eşmelioğlu CENG 114 – Spring 2009-10 132 66 Printing Strings Normally strings are right justified, but a minus sign after the % sign makes the string left justified printf(“%s*%s”, “123456”, “123”); prints > 1 23 45 6* 12 3 printf(“%5s\n%5s\n%5s\n”, “Ana”, “Baba”, “Cocuk”); prints > A na > Ba ba > C oc uk printf(“%-5s\n%-5s\n%-5s\n”, “Ana”, “Baba”, “Cocuk”); prints > A na > B ab a > C oc uk Dr. Sadık Eşmelioğlu CENG 114 – Spring 2009-10 133 Printing Arrays of Strings #include <stdio.h> int main(void) { int i; char Players[5][7] = {"Ahmet", "Hasan", "Naciye", "Ayse", "Nuri"}; printf ( "%s\n", Players); printf ( "%s\n", Players[0]); printf ( "%c\n", Players[0][0]); for(i=0;i<=4;i++) printf("%s\n", Players[i]); return(0); } Dr. Sadık Eşmelioğlu CENG 114 – Spring 2009-10 134 67 Reading Strings Reading strings with scanf works the same way as reading numbers: scanning for numbers begin with a numeric character (or decimal point) and ends when a non-numeric character is encountered. scanning for strings starts after the first white space character and ends when a white space character is reached (white space characters are spaces, tabs, newlines, …) a null character (\0) is placed after the last character is read. Dr. Sadık Eşmelioğlu CENG 114 – Spring 2009-10 Reading Strings char x[8]; scanf(“%s”, x); user enters >John > or user enters > > 135 or user enters John > > > John > The entry is stored in memory as shown: x[0] x[1] x[2] x[3] x[4] x[5] x[6] x[7] J Dr. Sadık Eşmelioğlu o h n \0 CENG 114 – Spring 2009-10 136 68 Reading Strings char int char int c [5]; n; d [5]; t; scanf(“%s %d %s %d”, c, &n, d, &t); user enters >CENG > 114 Thu 240 or user enters >CENG > 114 > 240 > Thu The entries are stored in memory as shown: Dr. Sadık Eşmelioğlu Var Addr Val Binary c[0] 7000 C 01000011 c[1] 7001 E 01000101 c[2] 7002 N 01001110 c[3] 7003 G 01000111 c[4] 7004 \0 00000000 n 7005 114 01110010 d[0] 7006 T 01010100 d[1] 7007 h 01101000 d[2] 7008 u 01110101 d[3] 7009 \0 00000000 d[4] 7010 ??? ?Unknown? t 7011 240 11110000 CENG 114 – Spring 2009-10 137 Example #include <stdio.h> #define NUM_STD100 #define NM_LEN15 /* Maximum number of students */ /* Maximum lenght of each name */ int main(void) { char name[NUM_STD][NM_LEN]; int Grade[NUM_STD];/ int i = 0; int num_std = 0; char ans = 'y'; char junk; Dr. Sadık Eşmelioğlu /* Array of student names */ /* Array of student grades */ /* Loop index */ /* Actual num of students read */ /* if equals 'y' continue reading */ /* reading newlines */ CENG 114 – Spring 2009-10 138 69 Example while(ans == 'y') { printf("Please enter Last Name and Grade: "); scanf("%s %d", name[i], &Grade[i]); i++; printf("\nAre there more students? [y/n]: "); scanf("%c%c%c", &junk, &ans, &junk); } num_std = i; for(i = 0; i < num_std; i++) printf("\n%-20s\t%4d\n", name[i], Grade[i]); return(0); } Dr. Sadık Eşmelioğlu CENG 114 – Spring 2009-10 139 String Library Functions #include <string.h> strlen return the length of string not counting \0 strcopy copies string from source to dest strncopy copies n chars from source to dest strcat appends string from source to end of dest strncat appends n chars from source to end of dest strcmp compares two strings alphabetically strncmp compares the first n chars of two strings strtok breaks string into tokens using delimiters Dr. Sadık Eşmelioğlu CENG 114 – Spring 2009-10 140 70
Benzer belgeler
Yenilenebilir Enerji
Proje / Projects
İmalat / Manufacturing
İnşaat / Construction
Enerji / Energy
Montaj / installation