2015-02-05 1 views
-1

이스케이프 시퀀스 값을 확인하기 위해 당신은 무엇을 사용할 것입니까? 두 개의 입력 arg1과 arg2가 있습니다. 인수에 ab \ t xyz를 입력하면. 그리고 나서 "ab \ t"를 입력으로 입력하면 "xyz"가 출력됩니다. 이것이 의미가 있고 IM이 실제로 이스케이프 문자 처리에 붙어 있기를 바랍니다. 현재 코드는 이스케이프 문자가 있거나 하나의 인수가 다른 인수보다 긴 경우를 제외하고 모두에 대해 작동합니다.다른 값으로 이스케이프 시퀀스 찾기 및 변환

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); 
     } 
    } 
+0

이 C 코드 또는 쉘 코드 tr? –

+0

을 볼 사용되는 코드

A!z!D 
pm100

+0

그것은 우리가 작성한 코드는 사용자 정의 tr() 함수를 만드는 것입니다. – TheUnknown

답변

0

편집 : 나는 두 가지 방법으로 이스케이프 문자를 해석 한

. 먼저 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 

프로그램 출력 :

+0

OP 문제가 명령 행에서 실행할 때 args에 \ t 문자를 입력하려고합니다. 예 : tr "abcd \ t ""xyxpq "라고하면 그는 \ 012로 끝나고 t – pm100

+0

@ pm100 응답이 향상되었다고 말하는 것 같습니다. 입력이 프로그램 인수에서 오는 경우 비슷한 방법이 사용될 수 있지만 OP는 getchar()을 사용합니다. –