微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将换行符和制表符等字符转换为可见的转义序列,如\n和\t

#include <stdio.h>

#define MAXLINE 1000

int getchars(char line[], int maxline);
void escape(char s[], char t[]);
void unescape(char s[], char t[]);

int main(void){
    char t[MAXLINE] = this is \na \ttest\ test \v test \r ;
    char s1[MAXLINE];
    char s2[MAXLINE];

    escape(s1, t);
    printf(\nescape result:\n%s\n, s1);

    unescape(s2, s1);
    printf(unescape result:\n%s\n, s2);

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

    for (i = 0, j = 0; t[i] != '\0'; ++i) {
        switch (t[i]) {
        case '\n':
            s[j++] =  '\\';
            s[j++] =  'n';
            break;
        case '\t':
            s[j++] =  '\\';
            s[j++] =  't';
            break;
        case '\v':
            s[j++] =  '\\';
            s[j++] =  'v';
            break;
        case '\b':
            s[j++] =  '\\';
            s[j++] =  'b';
            break;
        case '\r':
            s[j++] =  '\\';
            s[j++] =  'r';
            break;
        case '\f':
            s[j++] =  '\\';
            s[j++] =  'f';
            break;
        case '\a':
            s[j++] =  '\\';
            s[j++] =  'a';
            break;
        case '\\':
            s[j++] =  '\\';
            s[j++] =  '\\';
            break;
        case '\?':
            s[j++] =  '\\';
            s[j++] =  '\?';
            break;
        case '\'':
            s[j++] =  '\\';
            s[j++] =  '\'';
            break;
        case '\':
            s[j++] =  '\\';
            s[j++] =  '\';
            break;
        default:
            s[j++] = t[i];
            break;
        }
    }
    s[j] = '\0';
}

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

    for (i = 0, j = 0; t[i] != '\0'; ++i) {
        if (t[i] == '\\') {
            switch (t[++i]) {
            case 'n':
                s[j++] =  '\n';
                break;
            case 't':
                s[j++] =  '\t';
                break;
            case 'v':
                s[j++] =  '\v';
                break;
            case 'b':
                s[j++] =  '\b';
                break;
            case 'r':
                s[j++] =  '\r';
                break;
            case 'f':
                s[j++] =  '\f';
                break;
            case 'a':
                s[j++] =  '\a';
                break;
            case '\\':
                s[j++] =  '\\';
                break;
            case '\?':
                s[j++] =  '\?';
                break;
            case '\'':
                s[j++] =  '\'';
                break;
            case '\':
                s[j++] =  '\';
                break;
            // actually, cases below should never happen if the input string is correct.
            case '\0':
            default:
                s[j++] = '\\';
                --i;
                break;
            }
        } else {
            s[j++] =  t[i];
        }
    }
    s[j] = '\0';
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐