2016-12-16 7 views
1

私のプログラムは、テキストファイルを読み取り、隣接する二つの文字に変換される(最初のバックスラッシュであり、第二のいずれかである)の単一のエスケープ文字にどのように「エスケープ文字」にバックスラッシュの後に文字を変換する

char foo(char a, char b){ 
    ... // <---how to write this part? 
} 

expectd: foo('\\','n')->'\n' 

私ができます"'?\ab、01のリストから一致する許容可能なエスケープ文字のため

tmp = bytearray([ord('\\'), ord(Char)]) 
Char == tmp.decode('utf-8') # utf-8 is just python default codec, not related to the question 
+3

C++には、エスケープコードを認識するライブラリ関数はありません。非常に単純なルックアップ関数を書く必要があります。 –

+2

あなたはこれを過度に考えているかもしれません。サムが指摘しているように、(a == '\\' && b == 'n')が '\ n'を返した場合、しかし、もしそうでなければどうしますか? – Jeff

+3

たとえば'a'は' 'X''で、' b'は '' Y''ですか? 'foo( 'X'、 'Y') - > ???' –

答えて

2

検索:このようなのpython3で同等のコードを書きます、nvfr

char ab_to_escape(char a, char b) { 
    if (a == `\\`) { 
    static const char *escapev = "\"\'\?\\abtnvfr"; 
    static const char *escapec = "\"\'\?\\\a\b\t\n\v\f\r"; 
    char *p = strchr(escapev, b); 
    if (p == NULL || *p == '\0') { 
     return b; // TBD this condition, invalid escape character found. 
     // Perhaps it begins an octal (0-7) or hexadecimal (x or X) escape sequence? 
     // \0 or \x42 etc. 
    } 
    return escapec[p - escapev]; 
    } 
    return a;// TBD this condition 
} 

私はOPは、すべてのエスケープシーケンスを処理するためにかかわらず、さまざまな機能を必要とし、その多くが\\後に1つの文字よりも長くなっていると思います。

int Decode_Escape(char *dest, const char *src) { 
    int ch; 
    do { 
    ch = *src++; 
    if (src == '\\') { 
     if (simple_escape) Handle_Simple_Escape();   \\ \n \t ... 
     else if (octal_escape) Handle_Octal_Escape();   \\ \0 \123 
     else if (hex_escape) Handle_Hex_Escape();    \\ \x2 \XAb 
     else if (universal_escape) Handle_Universal_Escape(); \\ \uABCD \U12345678 
     else { Error(); return 1; } 
    } else { 
     *dest++ = ch; 
    } 
    } while (ch); 
    return 0; 
} 
関連する問題