K&R Exercise 1-9 (C)

后端 未结 30 1104
北荒
北荒 2021-01-31 19:46

\"Write a program to copy its input to its output, replacing each string of one or more blanks by a single blank.\"

I\'m assuming by thi

相关标签:
30条回答
  • 2021-01-31 20:21
    /*a program that copies its input to its output, replacing each string of one or more blanks by a single blank*/
    
    #include <stdio.h>
    #include<stdlib.h>
    
    int main(void)
    {
        double c;
        char blank = ' ';
    
        while((c = getchar()) != EOF)
        {
            if(c == ' ')                                
                {
                putchar(c);                             
    
                    while(( c = getchar() )== ' ')      
    
                        {
                        if(c != ' ')                    
                        break;
                        }
                }
    
    
    
    
            if(c == '\t')                               
                {
                    putchar(blank);                     
                        while((c = getchar()) == '\t')  
    
                        {
                        if(c != '\t')                   
                        break;
                        }
                }
    
        putchar(c);                                     
        }
    
    return 0;
    }
    
    0 讨论(0)
  • 2021-01-31 20:22

    This is a solution using only the techniques described so far in K&R's C. In addition to using a variable to achieve a finite state change for distinguishing the first blank space from successive blank spaces, I've also added a variable to count blank spaces along with a print statement to verify the total number. This helped me to wrap my head around getchar() and putchar() a little better - as well as the scope of the while loop within main().

    // Exercise 1-9. Write a program to copy its input to its output, replacing
    //               each string of one or more blanks by a single blank.
    
    #include <stdio.h>
    
    int main(void)
    {
        int blank_state;
        int c;
        int blank_count;
    
        printf("Replace one or more blanks with a single blank.\n");
        printf("Use ctrl+d to insert an EOF after typing ENTER.\n\n");
    
        blank_state = 0;
        blank_count = 0;
        while ( (c = getchar()) != EOF )
        {
            if (c == ' ')
            {
                ++blank_count;
                if (blank_state == 0)
                {
                    blank_state = 1;
                    putchar(c);
                }
            }
            if (c != ' ')
            {
                blank_state = 0;
                putchar(c);
            }
        }
    
        printf("Total number of blanks: %d\n", blank_count);
    
        return 0;
    }
    
    0 讨论(0)
  • 2021-01-31 20:23
    #include <stdio.h>
    main()
    {
        int c, numBlank=0 ;
        while((c= getchar())!=EOF)
        {
            if(c ==' ')
        {
            numBlank ++;
            if(numBlank <2)
            {
            printf("character is:%c\n",c);
            }
        }
        else
        {
            printf("character is:%c\n",c);
            numBlank =0;
        }
        }
    }
    
    0 讨论(0)
  • 2021-01-31 20:24

    Same explanation with Matt Joiner's, but this code does not use break.

    int c;
    
    while ((c = getchar()) != EOF)
    {
        if (c == ' ') /* find a blank */
        {
            putchar(' '); /* print the first blank */
            while ((c = getchar()) == ' ') /* look for succeeding blanks then… */
                ; /* do nothing */
        }
    
        if (c != EOF) /* We might get an EOF from the inner while-loop above */
            putchar(c);
    }
    
    0 讨论(0)
  • 2021-01-31 20:26

    a way to make it easier for the new people are stuck on this book (by not knowing any thing then what brought up until page 22 in K&R).

    credits to @Michael , @Mat and @Matthew to help me to understand

    #include <stdio.h>
    main()
    {
     int c;
    
    while ((c = getchar()) != EOF) /* state of "an input is not EOF" (1) */ 
     {
            if (c == ' ') /* "blank has found" -> change the rule now */
            {
              while ((c = getchar ()) == ' '); /* as long you see blanks just print for it a blank until rule is broken (2) */
              putchar(' ');
            }
       putchar(c); /* either state (2) was broken or in state (1) no blanks has been found */
      }
    }
    
    0 讨论(0)
  • 2021-01-31 20:27

    I am at the same point in the book. and my solution goes with making a count++ if blank is found and making the count back to zero if anything other than blank is found.

    For if statement I put another another check to check value of count (if zero) and then print.

    Though at this point of learning I shouldn't be concern about efficiency of two methods but which one is efficient a.) Accepted solution here with while inside while or b.) the one I suggested above.

    My code goes like below:

    #include <stdio.h>
    
    
    main()
    {
        int count=0,c;
        for( ; (c=getchar())!=EOF; )
        {
            if(c==' ')
            {
                if(count==0)
                {
                    putchar(c);
                    count++;
                }
            }
            if(c!=' ')
            {
                putchar(c);
                count=0;
            }
    
    
        }
    }
    
    0 讨论(0)
提交回复
热议问题