2016-12-16 66 views
1

我的程序读取文本文件,并转换两个相邻的字符(首先是反斜杠,第二个是任意)单逃逸字符如何将字符反斜杠后转换为“逃避字符”

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

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

我可以写在Python3这样的等同的代码:

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

你可能在想这个。正如Sam指出的那样,如果(a =='\\'&& b =='n')返回'\ n';但是,如果不是? – Jeff

+3

如果例如'a'是''X''和'b'是''Y''? 'foo('X','Y') - >''。 –

回答

2

搜索从"列表,'?\ab,01匹配可接受的转义字符,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需要不同的功能,虽然处理所有转义序列,其中有许多是在\\后长于一个字符。

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; 
} 
相关问题