All pastes #351144 Raw Edit

Someone

public text v1 · immutable
·published 2007-02-11 23:53 UTC
rendered paste body
clude <stdio.h>
#include <stdlib.h>

#include <stdio.h>
 
// The size of character arrays that we will use to store strings.
#define BUFSIZE 500
 
// Remove any leading spaces from string.
static void remove_leading_spaces(char *string)
{
        char *s;
 
        // Make s point at the first non-space character
        for (s = string; *s == ' '; s++)
                ;
 
        if (s == string)
                // There are no leading spaces so simply return
                return;
 
        // Now work forward through the string, copying each
        // character to an earler position.
        while (*s != '\0')
                *string++ = *s++;
 
        // Mark the new end of the string
        *string = '\0';
        return;
}
 
// Remove any spaces from the end of the string
static void remove_trailing_spaces(char *string)
{
        // ADD CODE HERE
        char *s;
 
        // Make s point at the first non-space character
        for (s = string; *s != '\0'; s++);
 
        //to go backwards till we find a non " "
        
        for(s--;*s==' ';s--);
        // jump forward one, so to access the first " " and set it to the end of the line \0 marker
                s++;
                *s='\0';
 
 
        if (s == string)
                // There are no trailing spaces so simply return
                return;
 
}
 
// Replace any sequence of 2 or more space characters by a single space.
static void remove_repeated_spaces(char *string)
{
 //char NULL  = 0;  // should be in scope at Main level!
 char space = 20; //     ditto                        
 char current;      //current value of string
 char previous;    // retained current value 
 char *read  = string;    // ptr to increment through string 
 char *write = string;    // ptr to retain current writeback position
 
        while (*read != '0')
        {
  //      current = *read; // does this work? 
             if (*read != space) 
             {
             *write = current; // write value back to original string                      
             *write++;        // increment write ptr
             previous = current; // retain value
             }
             else
             {    
                  if (current = previous) 
                     break;
                  else
                    {
                     *write = current; // write value back to original string               
                     *write++;       //increment write ptr
                     previous = current; //retain value
                            
                    }
             }
         }
         *write = '0';
         return; 
}         
 
// Read a line of input from the standard input and return 3 copies
// of it in s1, s2 and s3. zero is returned if successful, -1 if
// the input is at end-of-file.
static int get_test_strings(char *s1, char *s2, char *s3)
{
        // read a line to a maximum of BUFSIZE into the first string
        if (fgets(s1, BUFSIZE, stdin) == NULL)
                return -1;
 
        // Copy the first string into the other two strings.
        // Do not copy any trailing linefeed or carriage-return
        while (*s1 != '\0' && *s1 != '\n' && *s1 != '\r')
                *s3++ = *s2++ = *s1++;
 
        // terminate the two strings
        *s3 = *s2 = *s1 = '\0';
        return 0;
}
 
int main(int argc, char **argv)
{
        char buf1[BUFSIZE], buf2[BUFSIZE], buf3[BUFSIZE];
        
        printf("Test string:");
        while (get_test_strings(buf1, buf2, buf3) == 0) {
                remove_leading_spaces(buf1);
                remove_trailing_spaces(buf2);
                remove_repeated_spaces(buf3);
                printf("\twith leading spaces removed '%s'\n", buf1);
                printf("\twith trailing spaces removed '%s'\n", buf2);
                printf("\twith repeated spaces removed '%s'\n", buf3);
                printf("Test string:");
        }
        printf("\n");
        system("PAUSE");
        return 0;
}