[Exercise] Exercise 5-12. entab and detab to accept -m +n page 118

User avatar

Topic author
BJT
Site Admin
Site Admin
Posts: 141
Joined: Thu Apr 20, 2017 4:43 pm
Instruction: University Student
Gender:
Age: 27
Venezuela

Exercise 5-12. entab and detab to accept -m +n page 118

Post by BJT » Sat May 06, 2017 8:16 pm

Exercise 5-12. Extend entab and detab to accept the shorthand
entab -m +n
to mean tab stops every n columns, starting at column m. Choose convenient (for the user) default behavior.



entab
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <ctype.h>
  4.  
  5. int main(int argc, char * argv[])
  6. {
  7.     int tab=0;
  8.     int m=0,n=0;
  9.  
  10.     if (argc>1)
  11.     {
  12.         for(;argc>0;--argc,++argv)
  13.         {
  14.             if(**argv=='-')
  15.             {
  16.                 m=atoi( (*argv+1) );
  17.             }
  18.             if(**argv=='+')
  19.             {
  20.                 n=atoi( (*argv+1) );
  21.             }
  22.         }
  23.  
  24.     tab=m-n;
  25.     }
  26.     else
  27.         tab=5;
  28.  
  29.     if (tab<0)
  30.         tab=5;
  31.  
  32.     int c;
  33.     while((c=getchar())!=EOF)
  34.     {
  35.         if(c=='\t')
  36.             for(int i=0;i<tab;i++)
  37.                 putchar(' ');
  38.         else
  39.             putchar(c);
  40.     }
  41.  
  42.     return 0;
  43. }
input

Code: Select all

./c -15 +4
Hello	    world
output

Code: Select all

Hello           world

detab
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <ctype.h>
  4.  
  5. int main(int argc, char * argv[])
  6. {
  7.     int tab=0;
  8.     int m=0,n=0;
  9.  
  10.     if (argc>1)
  11.     {
  12.         for(;argc>0;--argc,++argv)
  13.         {
  14.             if(**argv=='-')
  15.             {
  16.                 m=atoi( (*argv+1) );
  17.             }
  18.             if(**argv=='+')
  19.             {
  20.                 n=atoi( (*argv+1) );
  21.             }
  22.         }
  23.  
  24.     tab=m-n;
  25.     }
  26.     else
  27.         tab=5;
  28.  
  29.     if (tab<0)
  30.         tab=5;
  31.  
  32.     int c,h;
  33.     int multi=0;
  34.     long counter=0;
  35.  
  36.     while((c=getchar())!=EOF)
  37.     {
  38.         if(c==' ')
  39.             ++counter;
  40.         if((counter>0)&&(c!=' '))
  41.         {
  42.             if(counter<tab)
  43.             {
  44.                 for(h=0; h<counter;h++)
  45.                     putchar(' ');
  46.             }
  47.             if(counter>=tab)
  48.             {
  49.                 for(h=tab; h<counter;h=h+tab,multi++)
  50.                     putchar('\t');
  51.                 for(counter=counter-multi*tab;counter>0;counter--)
  52.                     putchar(' ');
  53.             }
  54.             counter=0,multi=0;
  55.         }
  56.         if(c!=' ')
  57.             putchar(c);
  58.     }
  59.  
  60.     return 0;
  61. }

input

Code: Select all

./c-6 +4
Hello          world
output

Code: Select all

Hello				  world
word count: 273

Link:
BBcode:
HTML:
Hide post links
Show post links

Who is online

Users browsing this forum: No registered users and 1 guest