Download presentation
Presentation is loading. Please wait.
1
1 CSE1301 Computer Programming: Lecture 19 Character Strings
2
2 Topics Representation Declaration Index of a char in a string String operations Common mistakes
3
3 Representation Recall: Main memory –contiguous array of cells –each cell has an address 0x1FFF0x20000x20010x20020x1FFE etc
4
4 ch Representation (cont) Recall: Variable declaration –sets aside a “box” to contain a value Example: char ch; ch = ‘B’; 0x1FFF0x20000x20010x20020x1FFE etc ‘B’
5
5 Representation (cont) Example: char name[5]; Specifies number of cells in the array String declaration –sets aside an array of cells –each cell contains a char –address of first cell in the array
6
6 Representation (cont) String declaration –sets aside an array of cells –each cell contains a char –address of first cell in the array Example: char name[5]; 0x2000 0x2004 name is 0x2000
7
7 Character Arrays vs Character Strings A character string is a char array A character string must have the terminating character ( ’\0’ ) The terminating character allows scanf() and printf() to handle character strings
8
8 Character Strings Declaration 1: char name[5]; Declaration 2: #define MAXLENGTH 5 char name[MAXLENGTH]; 0x2000 0x2004 name is 0x2000
9
9 String Input/Output #include #define MAXLENGTH 15 int main() { char string1[MAXLENGTH]; char string2[MAXLENGTH]; scanf("%s %s", string1, string2); printf("%s %s\n", string1, string2); return 0; } No ampersand (&)!
10
10 Character String Declaration Declaration 1: char name[5] = “Ann”; Ann\0 Terminating Character: Marks the end of string Special char: ’\0’ aka NUL (single L) 0x2000 0x2004 name is 0x2000
11
11 Character String Declaration (cont) Declaration 1: char name[5] = “Ann”; Can store at most 4 letters, because of `\0’ Ann\0 0x2000 0x2004 name is 0x2000
12
12 Character String Declaration (cont) Declaration 2: char name[] = “Ann”; Takes up an extra cell for ‘\0’ Ann\0 0x2000 0x2003 name is 0x2000
13
13 Character String Declaration (cont) Declaration 3: char *name = “Ann”; Result is “undefined” if you try to modify this string Ann\0 0x3000 0x3003 0x3000 name
14
14 Character String Declaration (cont) Declaration 4: char name[]; String with arbitrary length? No! Will cause an error
15
15 A Char in a String The size of a character string is fixed Character at position index: –string[index] –first character has index 0
16
16 char name[8] = “John”; int i = 2; printf(“Char at index %d is %c.\n”, i, name[i]); A Char in a String (cont) output: Char at index 2 is h. index 0index 4 John\0 0x39950x399C name is 0x3995
17
17 A Char in a String (cont) index 2 John\0 0x39950x399C name is 0x3995 char name[8] = “John”; name[2] = ‘X’; printf(“Name: %s\n”, name); X
18
18 JoXn\0 0x39950x399C name is 0x3995 output: Name: JoXn index 2 char name[8] = “John”; name[2] = ‘X’; printf(“Name: %s\n”, name); A Char in a String (cont)
19
19 String Operations #include Operations: –Assignment: strcpy() –Concatenation: strcat() –Comparison: strcmp() –Length: strlen()
20
20 #include #define MAXLENGTH 100 int main() { char string1[MAXLENGTH]; char string2[MAXLENGTH]; strcpy(string1, “Hello World!”); strcpy(string2, string1); return 0; } String Operation: Assignment string1: string2:
21
21 String Operation: Assignment (cont) #include #define MAXLENGTH 100 int main() { char string1[MAXLENGTH]; char string2[MAXLENGTH]; strcpy(string1, “Hello World!”); strcpy(string2, string1); return 0; } string1: “Hello World!” string2:
22
22 String Operation: Assignment (cont) #include #define MAXLENGTH 100 int main() { char string1[MAXLENGTH]; char string2[MAXLENGTH]; strcpy(string1, “Hello World!”); strcpy(string2, string1); return 0; } string1: “Hello World!” string2: “Hello World!”
23
23 char name1[5] = “Ann”; char name2[5] = “Dave”; name2 = name1; Common Mistake 1: Incompatible types Example: Error: “LValue required...”
24
24 Common Mistake 2: Not enough space Ann\0 0x2000 0x2003 char name[] = “Ann”; strcpy(name, “David”); name is 0x2000
25
25 Common Mistake 2: Not enough space David\0 0x2003 char name[] = “Ann”; strcpy(name, “David”); 0x2000 name is 0x2000
26
26 char *name1 = “Ann”; char *name2 = “Dave”; name2 = name1; Caution 1: Pointer Assignment Example:
27
27 Caution 1: Pointer Assignment Dave\0 0x39900x3994 Ann\0 0x20000x2003 0x2000 name1 0x3990 name2 char *name1 = “Ann”; char *name2 = “Dave”;
28
28 Caution 1: Pointer Assignment Dave\0 0x39900x3994 Ann\0 0x20000x2003 0x2000 name1 0x2000 name2 name2 = name1;
29
29 Example: strassign.c #include #define MAXLENGTH 5 int main() { char name1[MAXLENGTH] = “Ann”; char name2[] = “Ann”; char *name3 = “John”; char name4[MAXLENGTH]; printf(“\nBEFORE\nname1=%s, name2=%s, name3=%s”, name1, name2, name3); strcpy(name1,”Fred”); strcpy(name2,”Fred”); strcpy(name4,name1); name3 = name2; printf(“\nAFTER\nname1=%s, name2=%s, name3=%s, name4=%s”, name1, name2, name3, name4); strcpy(name1,”Jack”); strcpy(name2,”Jim”); printf(“\nLAST\nname1=%s, name2=%s, name3=%s, name4=%s”, name1, name2, name3, name4); return 0; }
30
30 String Operation: Concatenation char string1[MAXLENGTH]; char string2[MAXLENGTH]; strcpy(string1, “Goodbye”); strcpy(string2, “, Cruel ”); strcat(string1, string2); strcat(string1, “World!”); string1: “Goodbye” string2: “, Cruel “
31
31 char string1[MAXLENGTH]; char string2[MAXLENGTH]; strcpy(string1, “Goodbye”); strcpy(string2, “, Cruel ”); strcat(string1, string2); strcat(string1, “World!”); string1: “Goodbye, Cruel ” string2: “, Cruel ” String Operation: Concatenation (cont)
32
32 string1: “Goodbye, Cruel, Cruel ” string2: “, Cruel ” String Operation: Concatenation (cont) char string1[MAXLENGTH]; char string2[MAXLENGTH]; strcpy(string1, “Goodbye”); strcpy(string2, “, Cruel ”); strcat(string1, string2); strcat(string1, “World!”);
33
33 string1: “Goodbye, Cruel, Cruel World!” string2: “, Cruel ” String Operation: Concatenation (cont) char string1[MAXLENGTH]; char string2[MAXLENGTH]; strcpy(string1, “Goodbye”); strcpy(string2, “, Cruel ”); strcat(string1, string2); strcat(string1, “World!”);
34
34 Common Mistake: char name[5]; strcpy(name, “Ann”); strcat(name, “ Smith”); Not enough space Ann\0 0x2000 0x2004 name is 0x2000
35
35 Common Mistake: char name[5]; strcpy(name, “Ann”); strcat(name, “ Smith”); Not enough space AnnSmit 0x2000 0x2004 h\0 name is 0x2000
36
36 strcpy(string1, “Apple”); strcpy(string2, “Wax”); if (strcmp(string1, string2) < 0) { printf(“%s %s\n”, string1, string2); } else { printf(“%s %s\n”, string2, string1); } String Operation: Comparison Returns: negative if string1 < string2 zero if string1 == string2 positive if string1 > string2
37
37 strcpy(string1, “Apple”); strcpy(string2, “Wax”); if (strcmp(string1, string2) < 0) { printf(“%s %s\n”, string1, string2); } else { printf(“%s %s\n”, string2, string1); } String Operation: Comparison (cont) output: Apple Wax
38
38 strcpy(string1, “Apple”); strcpy(string2, “Wax”); if (string1 < string2) { printf(“%s %s\n”, string1, string2); } else { printf(“%s %s\n”, string2, string1); } Common Mistake: Wrong Comparison
39
39 char string1[100]; strcpy(string1, “Apple”); printf(“%d\n”, strlen(string1)); output: 5 Number of char-s before the `\0’ String Operation: Length
40
40 Common Mistake: char name[5]; strcpy(name, “David”); Not enough space Don’t forget the ‘\0’ David\0 0x39900x3994 name is 0x3990
41
41 Character Strings as Parameters Strings as formal parameters are declared as char* or char[] –Examples: void Greet ( char* name ) void Greet ( char name[] ) They point to the first element of the string (array of chars) Changes to the string inside the function affect the actual string
42
42 Example: hello3.c #include #define NAMELEN 50 /* Print a simple greeting to the user */ void Greet ( char * name ) { strcat(name, "! How are ya?"); } int main() { char user[NAMELEN]; printf("Who are you? "); scanf("%s", user); Greet(user); printf("%s\n", user); return 0; } user Jake\0
43
43 int main() { char user[NAMELEN]; printf("Who are you? "); scanf("%s", user); Greet(user); printf("%s\n", user); return 0; } #include #define NAMELEN 50 /* Print a simple greeting to the user */ void Greet ( char * name ) { strcat(name, "! How are ya?"); } Example: hello3.c (cont) name user Jake\0
44
44 int main() { char user[NAMELEN]; printf("Who are you? "); scanf("%s", user); Greet(user); printf("%s\n", user); return 0; } #include #define NAMELEN 50 /* Print a simple greeting to the user */ void Greet ( char * name ) { strcat(name, "! How are ya?"); } Example: hello3.c (cont) user Jake! How are ya?\0 name
45
45 int main() { char user[NAMELEN]; printf("Who are you? "); scanf("%s", user); Greet(user); printf("%s\n", user); return 0; } Example: hello3.c (cont) #include #define NAMELEN 50 /* Print a simple greeting to the user */ void Greet ( char * name ) { strcat(name, "! How are ya?"); } user Jake! How are ya?\0
46
46 int main() { char user[NAMELEN]; printf("Who are you? "); scanf("%s", user); Greet(user); printf("%s\n", user); return 0; } More of scanf demystified No ampersand (&) in scanf with strings!
47
47 Summary A string is a contiguous array of chars The string identifier is the address of the first char in the string Individual chars are accessed using the str[index] notation There are C library functions for copying, concatenating and comparing strings
48
48 Reading King – Chapter 13 (except Section 13.6) Deitel and Deitel – Chapter 8 (8.1 – 8.7)
Similar presentations
© 2024 SlidePlayer.com Inc.
All rights reserved.