2016-12-16 97 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; 
} 
相關問題