The C Programming Language 练习题3-2

题目
编写一个函数escape(s, t),将字符串t 复制到字符串s 中,并在复制过程中将换行符、制表符等不可见字符分别转换为\n、\t等相应的可见的转义字符序列。要求使用swich语句。再编写一个具有相反功能的函数,在复制过程中将转义字符序列转换为实际字符。

题目分析
写的代码好像无法识别’\t’这个标志,只好用空格来代替。
发现是因为自己太懒。。。。。把那一段输入的字符copy到记事本当中,再次copy出来时,系统就认为’\t’是几个空格了。。。重新修改后更新程序如下:

代码实现

#include <stdio.h>

int main()
{
    int c, d, i, j;
    char chartesta[200], chartestb[200], chartestc[200];

    i = 0;
    while ((c = getchar()) != EOF && i < 200)
    {
        chartesta[i] = c;
        i++;
    }
    chartesta[i] = '\0';
    i = j = 0;
    while ((c = chartesta[i++]) != '\0' && i < 200)
        switch(c)
    {
    case '\t':
        {
            chartestb[j++] ='\\';
            chartestb[j++] ='t';
            break;
        }
    case '\n':
        {
            chartestb[j++] ='\\';
            chartestb[j++] ='n';
            break;
        }
    default:
        {
            chartestb[j++] = c;
            break;
        }

    }
    chartestb[j] = '\0';
    i = 0;
    while (chartestb[i] != '\0' && i < 200)
    {
        printf("%c", chartestb[i]);
        i++;
    }
    printf("\n");
    i = j = 0;
    while ((c = chartestb[i]) != '\0' && i < 200)
    {
    switch(c)
    {
    case '\\':
        {
            d = chartestb[i + 1];
            i++;
            switch(d)
            {
            case 't':
                chartestc[j++] = '\t';
                break;
            case 'n':
                chartestc[j++] = '\n';
                break;
            }
            break;
        }
    default:
        {
            chartestc[j++] = c;
            break;
        }

    }
    i++;
    }
    chartestc[i] = '\0';
    i = 0;
    while (chartestc[i] != '\0' && i < 200)
    {
        printf("%c", chartestc[i]);
        i++;
    }
}

执行结果

abc     def  gh ijkl    mn
opq     rst vw  xy      z
^Z
abc\tdef  gh\tijkl\tmn\nopq\trst vw\txy \tz\n
abc     def  gh ijkl    mn
opq     rst vw  xy      z
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值