【问题标题】:Locating and translating escape sequences to other values定位转义序列并将其转换为其他值
【发布时间】:2015-02-05 22:20:50
【问题描述】:

你会用什么来检查转义序列值? 我有两个输入 arg1 和 arg2。如果您在参数中输入 ab\t xyz。然后,如果您在输入中输入“ab\t”,您将得到“xyz”作为输出。 我希望这是有道理的,我真的坚持转义字符处理。目前该代码适用于所有人,除非有转义字符或一个参数比另一个长。

it is a c code we wrote on our own the plan is to make a custom tr() function
void tr_str(char s[], char news[]){
    int c;
    size_t k =0;
        while ((c = getchar()) != EOF)
        {
            for(k=0; k < strlen(s);k++)
            {                   
                if(c == s[k])
                {
                    c = news[k];
                }
            }
            putchar(c);
        }
    }

【问题讨论】:

  • 用于查看的代码在哪里
  • 这是使用tr的c代码还是shell代码?
  • 这是我们自己写的c代码,计划是做一个自定义的tr()函数
  • 我将代码添加到问题中。
  • 好的 - 调试器说发生了什么

标签: c io tr


【解决方案1】:

编辑:

我以两种方式解释了转义字符。首先tab 字符在数组s[] 中,其次我将\ 字符捕获在\t 的转义序列中,并使用第二对数组来转换转义序列。

#include <stdio.h>
#include <string.h>

int main(void) { 
    char s[]="abcd\t";
    char news[]="ABCD!";
    char e[]="t";
    char newe[]="!";
    int c, k, esc = 0;
    while ((c = getchar()) != EOF) {
        if (esc) {
            for (k=strlen(e)-1; k>=0; k--) {
                if (c == e[k]) {
                    c = newe[k];
                    break;
                }
            }
            putchar(c);
            esc = 0;
        }
        else if (c == '\\') {
            esc = 1;
        } 
        else {
            for (k=strlen(s)-1; k>=0; k--) {
                if (c == s[k]) {
                    c = news[k];
                    break;
                }
            }
            putchar(c);
        }
    }
    return 0;
}

程序输入(空格来自tab 键)

a\tz      d

程序输出:

A!z!D

【讨论】:

  • 我怀疑 OP 问题是在从命令行运行时尝试将 \t 字符输入到 args 中 - 即 tr "abcd\t" "xyxpq",他似乎是在说他以 \ 和 t 结尾
  • @pm100 答案改进,如果输入来自程序参数,则可以使用类似的方式,但 OP 使用 getchar()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-02
  • 2022-11-03
  • 1970-01-01
  • 2019-03-27
  • 2015-03-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多