home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk1.iso / altsrc / articles / 10059 < prev    next >
Text File  |  1994-06-19  |  3KB  |  107 lines

  1. Path: wupost!cs.utexas.edu!swrinde!sgiblab!cs.uoregon.edu!reuter.cse.ogi.edu!netnews.nwnet.net!news.u.washington.edu!dbrick
  2. From: dbrick@u.washington.edu (Douglas Brick)
  3. Newsgroups: alt.sources,comp.sources.misc,comp.lang.c
  4. Subject: Beginning C Silliness (reverses text)
  5. Date: 25 Mar 1994 03:15:27 GMT
  6. Organization: University of Washington
  7. Lines: 94
  8. Approved: No!
  9. Message-ID: <2mtl0f$512@news.u.washington.edu>
  10. NNTP-Posting-Host: stein.u.washington.edu
  11. Xref: wupost alt.sources:10059 comp.sources.misc:4572 comp.lang.c:79445
  12.  
  13. I've been trying to teach myself C by working through Kernighan and
  14. Ritchie's 2nd ed. of The C Programming Language, and couldn't resist
  15. posting my solution to ex. 1-19.  If you run text through it, it will
  16. reverse the text across the screen, like this:
  17.  
  18.       dna nahginreK hguorht gnikrow yb C flesym hcaet ot gniyrt neeb ev'I
  19.      tsiser t'ndluoc dna ,egaugnaL gnimmargorP C ehT fo .de dn2 s'eihctiR
  20.     lliw ti ,ti hguorht txet nur uoy fI  .91-1 .xe ot noitulos ym gnitsop
  21.                            :siht ekil ,neercs eht ssorca txet eht esrever
  22.  
  23. --
  24. #include <stdio.h>
  25.  
  26. #define MAXLINE 79          /* screenwidth - 1 */
  27.  
  28. reverse();                  /* reverses the character string 's' */
  29. int getline();              /* reads a line of input into an array */
  30. copy();                     /* copies one array into another */
  31. elimws();                   /* eliminates trailing whitespace */
  32.  
  33. /* bkwds: prints reversed text lines */
  34. main()
  35. {
  36.   int i;
  37.   int len;                      /* current line length */
  38.   char line[MAXLINE+1];         /* current input line */
  39.  
  40.   while ((len = getline(line, MAXLINE+1)) > 0){ /* as long as there is input */
  41.     len = elimws(line, len);
  42.     reverse(line, len);
  43.     for (i = 0; i < MAXLINE - len; ++i)
  44.       putchar(' ');
  45.     printf("%s\n", line);
  46.   }
  47.   return 0;
  48. }
  49.  
  50. /* elimws: eliminates trailing whitespace from input array 's' of
  51.    length 'lim' and returns length of newly reduced array */
  52. elimws(s, lim)
  53. char s[];
  54. int lim;
  55. {
  56.   while (lim > 0 && (s[lim-1]=='\n' || s[lim-1]=='\t' || s[lim-1]==' ')) {
  57.     s[lim-1] = '\0';
  58.     --lim;
  59.   }
  60.   return lim;
  61. }
  62.  
  63. /* reverse: reverses the character string 's' */
  64. reverse(s, lim)
  65. char s[];
  66. int lim;
  67. {
  68.   int i;
  69.   char s2[MAXLINE];              /* temp array to hold reversed string */
  70.  
  71.   for (i = 0; i < lim; ++i)
  72.     s2[i] = s[lim-1-i];
  73.   s2[lim] = '\0';
  74.   copy(s, s2);
  75.   return 0;
  76. }
  77.  
  78. /* getline: read a line into s, returns length */
  79. getline(s, lim)
  80. char s[];
  81. int lim;
  82. {
  83.   int c, i;
  84.  
  85.   for (i=0; i<lim-1 && (c=getchar())!=EOF && c!='\n'; ++i)
  86.     s[i] = c;
  87.   if (c == '\n') {
  88.     s[i] = c;
  89.     ++i;
  90.   }
  91.   s[i] = '\0';
  92.   return i;
  93. }
  94.  
  95. /* copy: copy 'from' into 'to'; assume to is big enough */
  96. copy(to, from)
  97. char to[], from[];
  98. {
  99.   int i;
  100.  
  101.   i = 0;
  102.   while ((to[i] = from[i]) != '\0')
  103.     ++i;
  104.   return 0;
  105. }
  106.  
  107.