90 likes | 157 Vues
16.216 ECE Application Programming. Instructor: Dr. Michael Geiger Fall 2014 Lecture 22 More string examples. Lecture outline. Announcements/reminders Program 6 due 10/30 Program 7 posted; due 11/10 Exam 2: Wednesday, 11/5 Allowed one double-sided 8.5” x 11” sheet of notes
E N D
16.216ECE Application Programming Instructor: Dr. Michael Geiger Fall 2014 Lecture 22 More string examples
Lecture outline • Announcements/reminders • Program 6 due 10/30 • Program 7 posted; due 11/10 • Exam 2: Wednesday, 11/5 • Allowed one double-sided 8.5” x 11” sheet of notes • Midterm grades posted • Weighted avg. based on 1st 2 programs (60%), Exam 1 (40%) • SAT (70+), CAU (60-69), FAI (<60), NA (0) • Review • Character arrays and strings • Today’s lecture • More string examples ECE Application Programming: Lecture 22
Review 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; } ECE Application Programming: Lecture 22
Example solution s1 = 16 Initial value of s1 Length of s1 = 2 6 s1[1] s1 = 16.216 s1 after strncat() Length of s1 = 6 Enter two strings: ABC ABD ABC < ABD Result of strncmp() ECE Application Programming: Lecture 22
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: • intreadStrings(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 s1terminates with a null character. • intfillString(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) ECE Application Programming: Lecture 22
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; } ECE Application Programming: Lecture 22
Example solution (cont.) void copyNull(char *s1, char *s2, int n) { strncpy(s1, s2, n); s1[n] = ‘\0’; } ECE Application Programming: Lecture 22
Example solution (cont.) intfillString(char *s, int n) { char input[50]; // Assume max // 50 chars intcharsLeft; // 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); } ECE Application Programming: Lecture 22
Final notes • Next time • File I/O • Reminders: • Program 6 due 10/30 • Program 7 posted; due 11/10 • Exam 2: Wednesday, 11/5 • Allowed one double-sided 8.5” x 11” sheet of notes • Midterm grades posted • Weighted avg. based on 1st 2 programs (60%), Exam 1 (40%) • SAT (70+), CAU (60-69), FAI (<60), NA (0) ECE Application Programming: Lecture 22