EXERCISES ON CHARACTERS AND STRINGS
1. What does the following code fragment print out.
#include <stdio.h>
int main(void) {
char c1 = 'A', c2 = '8';
int m = 66, n;
printf("'A' : %c %d\n", c1, c1);
printf("'8' : %c %d\n", c2, c2);
printf("66 : %c %d\n", m, m);
printf("'A' + 2 : %c %d\n", c1 + 2, c1 + 2);
n = (c2 - '0') * m;
printf("n = %d\n", n);
return 0;
}
2. Which of the following sets i to the length of the string a?
(a) i = strlen(a);
(b) i = 0; while (a[i] != '\0') ++i;
(c) i = 0; while (a[i] != '\0') i++;
(d) for (i = 0, b = a; *b != '\0'; b++) i++;
(e) for (i = 0; a[i] != '\0'; i++) ;
(f) b = a; while (*b++) ; i = b-a-1;
(g) b = a; while (*b) b++; i = b-a;
3. What is wrong with the following program for printing out the length
of a word from standard input?
#include <stdio.h>
int main(void) {
int n;
char a[101];
scanf("%s", a);
for (n = 0; *a != '\0'; a++)
n++;
printf("%d %s\n", n, a);
return 0;
}
4. Explain what the following program does.
#include <stdio.h>
#include <string.h>
int main(void) {
int i, N;
char word[101];
while (scanf("%s", word) != EOF) {
N = strlen(word);
for (i = 0; i < N; i++)
if (word[i] <= word[i+1])
break;
if (i == N)
printf("%d %s\n", N, word);
}
}
return 0;
}
5. Write a program that prints out any words in its input that
are palindromes (read the same forwards and backwards).
6. Write a C function that takes a string as an argument and modifies
the string so as to remove all consecutive duplicate characters,
e.g., mississippi -> misisipi.
7. (a) Write a C program that takes a filename as a command line input,
copies the contents of the file into a string, and prints the
string.
(b) Modify your solution to part (a) so that it discards all characters
except {a, c, g, t} when copying into the string.
(c) Modify your solution to part (a) so that it discards all characters
except {A, B, ..., Y} when copying into the string.