Exercise 3.2 - escape sequences into the real characters

Question

Write a function escape(s,t) that converts characters like newline and tab into visible escape sequences like n and t as it copies the string t to s. Use a switch. Write a function for the other direction as well, converting escape sequences into the real characters.

/* Write a function escape(s,t) that converts characters like newline and tab into visible escape sequences like \n and \t as it copies the string t to s. Use a Switch. Write a function for 
the other direction as well,converting the escape sequences into the real characters */

#include<stdio.h>
#define MAXLINE 1000
int mgetline(char line[],int maxline);
void escape(char s[],char t[]);


int main(void)
{
    char s[MAXLINE],t[MAXLINE];

    mgetline(t,MAXLINE);

    escape(s,t);

    printf("%s",s);

    return 0;
}

void escape(char s[],char t[])
{
    int i,j;

    i=j=0;

    while(t[i] != '\0')
    {
        switch(t[i])
        {
            case '\t':
                    s[j]='\\';
                    ++j;
                    s[j]='t';
                    break;
            case '\n':
                    s[j]='\\';
                    ++j;
                    s[j]='n';
                    break;
            default:
                    s[j]=t[i];
                    break;
        }
        ++i;
        ++j;
    }
    
    s[j]='\0';
}

int mgetline(char s[],int lim)
{
    int i,c;

    for(i=0;i<lim-1 && (c=getchar())!=EOF;++i)
        s[i]=c;

    s[i]='\0';
}
Run this

Explanation

C Program interpreters \n and \t as space characters and outputs them. Our intention is to capture the \n and \t characters and display them visibly as n or t. In order to do that we need to escape them, the escaping is done by adding \ character.

So in the program as soon as we see a \n character, in the array where we are copying to, we copy \\ character and add a n character and similarly, when we see a \t character, in the array where we are copying to, we copy \\ character and add a t character.

Comments by Disqus