Presentation is loading. Please wait.

Presentation is loading. Please wait.

EECE.2160 ECE Application Programming

Similar presentations


Presentation on theme: "EECE.2160 ECE Application Programming"— Presentation transcript:

1 EECE.2160 ECE Application Programming
Instructors: Dr. Michael Geiger & Peilong Li Spring 2016 Lecture 24 Strings

2 ECE Application Programming: Lecture 23
Lecture outline Announcements/reminders Program 4, 5 grades done; regrade deadlines TBD Program 7 due 4/8 (will preview on Monday) Today’s lecture Character arrays and strings Return exams 2/16/2019 ECE Application Programming: Lecture 23

3 ECE Application Programming: Lecture 23
Review: strings Represented as character arrays Can be initialized using string constants char hello[] = “Hello”; Can access individual elements hello[3] = ‘l’; Can print directly or with formatting Print directly: printf(hello); Print w/formatting using %s: printf(“%s\n”, hello); Must leave enough room for terminating ‘\0’ 2/16/2019 ECE Application Programming: Lecture 23

4 String functions (cont.)
In <string.h> library: Copying strings: char *strcpy(char *dest, const char *source); char *strncpy(char *dest, const char *source, size_t num); Return dest Does not append ‘\0’ unless length of source < num Comparing strings: int strcmp(const char *s1, const char *s2); int strncmp(const char *s1, const char *s2, size_t num); Character-by-character comparison of character values Returns 0 if s1 == s2, >0 if s1 > s2, <0 if s1 < s2 2/16/2019 ECE Application Programming: Lecture 23

5 String functions (cont.)
Find # of characters in a string size_t strlen(const char *s1); Returns # characters before ‘\0’ Not necessarily size of array “Add” strings together—string concatenation char *strcat(char *dest, const char *source); char *strncat(char *dest, const char *source, size_t num); Returns dest 2/16/2019 ECE Application Programming: Lecture 23

6 ECE Application Programming: Lecture 23
Example: Strings What does the following program print? int main() { char s1[15]; int n1; char s2[10] = “.216”; int n; strncpy(s1, “16”, 15); n1 = strlen(s1); printf(“s1 = %s\n”, s1); printf(“Length of s1 = %d\n\n”, n1); printf(“%c\n\n”, s1[1]); strncat(s1,s2,10); n1 = strlen(s1); printf(“s1 = %s\n”, s1); printf(“Length of s1 = %d\n\n”, n1); // Assume user inputs: ABC ABD printf(“Enter two strings:”); scanf(“%s%s”, s1, s2); n = strncmp(s1, s2, 15); if (n > 0) printf(“%s > %s\n”, s1, s2); else if (n < 0) printf(“%s < %s\n”, s1, s2); else printf(“%s == %s\n”, s1, s2); return 0; } 2/16/2019 ECE Application Programming: Lecture 23

7 ECE Application Programming: Lecture 23
Example solution s1 = 16 Initial value of s1 Length of s1 = 2 6 s1[1] s1 = s1 after strncat() Length of s1 = 6 Enter two strings: ABC ABD ABC < ABD Result of strncmp() 2/16/2019 ECE Application Programming: Lecture 23

8 Example: Using string functions
Works with main program in PE Assume input strings have max of 49 chars (+ ‘\0’) Write a function to do each of the following: int readStrings(char *s); Repeatedly read strings from standard input until the input string matches s. Return the number of strings read. void copyNull(char *s1, char *s2, int n); Copy the first n characters of s2 into s1, and make sure that the new version of s1 terminates with a null character. int fillString(char *s, int n); Repeatedly read strings from standard input and concatenate them to s until there is no room in the string. Return the final length of the string. For example, if s is a 6-character array already holding “abcd”: User enters “e”—string is full; return 5 User enters “ef”—there’s not enough room; return 4 Assume s initially contains null terminated string (or is empty) 2/16/2019 ECE Application Programming: Lecture 23

9 ECE Application Programming: Lecture 23
Example solution int readStrings(char *s) { char str[50]; // Assume max 50 chars int count = 0; do { scanf(“%s”, str); // NOTE: do not // need &str count++; } while (strcmp(str, s) != 0); return count; } 2/16/2019 ECE Application Programming: Lecture 23

10 Example solution (cont.)
void copyNull(char *s1, char *s2, int n) { strncpy(s1, s2, n); s1[n] = ‘\0’; } 2/16/2019 ECE Application Programming: Lecture 23

11 Example solution (cont.)
int fillString(char *s, int n) { char input[50]; // Assume max // 50 chars int charsLeft; // Space remaining // in s do { scanf(“%s”, input); // Calculate # chars left in array if input // string is added. Need to leave room for ‘\0’ charsLeft = n – (strlen(s) + 1) – strlen(input); if (charsLeft > 0) // Enough space to add this string strcat(s, input); // and continue else { // Out of room if (charsLeft == 0) // Can add input, but then out of room strcat(s, input); return strlen(s); } } while (1); 2/16/2019 ECE Application Programming: Lecture 23

12 ECE Application Programming: Lecture 23
Final notes Next time Structures Reminders: Program 4, 5 grades done; regrade deadlines TBD Program 7 due 4/8 (will preview on Monday) 2/16/2019 ECE Application Programming: Lecture 23


Download ppt "EECE.2160 ECE Application Programming"

Similar presentations


Ads by Google