|  |   | 
|  | 
| 
 |  Chapter 13Answers to Selected Exercises2. [was #2] 
(a) Illegal;  4. [was #4] (a) 
int read_line(char str[], int n)
{
  int ch, i = 0;
  while ((ch = getchar()) != '\n')
    if (i == 0 && isspace(ch))
      ;   /* ignore */
    else if (i < n)
      str[i++] = ch;
  str[i] = '\0';
  return i;
}
(b) 
int read_line(char str[], int n)
{
  int ch, i = 0;
  while (!isspace(ch = getchar()))
    if (i < n)
      str[i++] = ch;
  str[i] = '\0';
  return i;
}
(c) 
int read_line(char str[], int n)
{
  int ch, i = 0;
  do {
    ch = getchar();
    if (i < n)
      str[i++] = ch;
  } while (ch != '\n');
  str[i] = '\0';
  return i;
}
(d) 
int read_line(char str[], int n)
{
  int ch, i;
  for (i = 0; i < n; i++) {
    ch = getchar();
    if (ch == '\n')
      break;
    str[i] = ch;
  }
  str[i] = '\0';
  return i;
}
6. [was #6] 
void censor(char s[])
{
  int i;
  for (i = 0; s[i] != '\0'; i++)
    if (s[i] == 'f' && s[i+1] == 'o' && s[i+2] =='o')
      s[i] = s[i+1] = s[i+2] = 'x';
}
Note that the short-circuit evaluation of  
8. [was #10]  
10. [was #12] The value of  15. [was #8] 
(a) 3 16. [was #16] 
int count_spaces(const char *s)
{
  int count = 0;
  while (*s)
    if (*s++ == ' ')
      count++;
  return count;
}
Answers to Selected Programming Projects1. [was #14] 
#include <stdio.h>
#include <string.h>
#define WORD_LEN 20
void read_line(char str[], int n);
int main(void)
{
  char smallest_word[WORD_LEN+1],
       largest_word[WORD_LEN+1],
       current_word[WORD_LEN+1];
  printf("Enter word: ");
  read_line(current_word, WORD_LEN);
  strcpy(smallest_word, strcpy(largest_word, current_word));
  while (strlen(current_word) != 4) {
    printf("Enter word: ");
    read_line(current_word, WORD_LEN);
    if (strcmp(current_word, smallest_word) < 0)
      strcpy(smallest_word, current_word);
    if (strcmp(current_word, largest_word) > 0)
      strcpy(largest_word, current_word);
  }
  printf("\nSmallest word: %s\n", smallest_word);
  printf("Largest word: %s\n", largest_word);
  return 0;
}
void read_line(char str[], int n)
{
  int ch, i = 0;
  while ((ch = getchar()) != '\n')
    if (i < n)
      str[i++] = ch;
  str[i] = '\0';
}
4. [was #18] 
#include <stdio.h>
int main(int argc, char *argv[])
{
  int i;
  for (i = argc - 1; i > 0; i--)
    printf("%s ", argv[i]);
  printf("\n");
  return 0;
}
6. [was #20] 
#include <ctype.h>
#include <stdio.h>
#include <string.h>
#define NUM_PLANETS 9
int string_equal(const char *s, const char *t);
int main(int argc, char *argv[])
{
  char *planets[] = {"Mercury", "Venus", "Earth",
                     "Mars", "Jupiter", "Saturn",
                     "Uranus", "Neptune", "Pluto"};
  int i, j;
  for (i = 1; i < argc; i++) {
    for (j = 0; j < NUM_PLANETS; j++)
      if (string_equal(argv[i], planets[j])) {
        printf("%s is planet %d\n", argv[i], j + 1);
        break;
      }
    if (j == NUM_PLANETS)
      printf("%s is not a planet\n", argv[i]);
  }
  return 0;
}
int string_equal(const char *s, const char *t)
{
  int i;
  for (i = 0; toupper(s[i]) == toupper(t[i]); i++)
    if (s[i] == '\0')
      return 1;
  return 0;
}
Copyright © 2008, 1996 W. W. Norton & Company, Inc. All rights reserved. |