2012-08-13 38 views
1

我的目標是進入' '" ",並'\n'轉化爲"\n"轉換一個char「」或換行符爲一個字符串

下面的代碼適用於一般的情況,但不帶空格和'\n'。由於>><<運營商不採取' ''\n' s。

std::string stringFromChar(char a) { 
    std::stringstream ss(std::stringstream::in | std::stringstream::out | std::stringstream::binary); 
    std::string s; 
    ss << a; 
    ss >> s; 
    return s; 
} 

我想通過使用std::stringstream::binary,它使用二進制數來讀寫。因此,保留角色,而不會丟失空格或換行符。

我發現雖然a' 's原來是""

我知道一種方法來解決這個問題:

std::string stringFromChar(char a) { 
    std::stringstream ss(std::stringstream::in | std::stringstream::out | std::stringstream::binary); 
    std::string s; 
    ss << a; 
    s = ss.str(); 
    return s; 
} 

這是真的,它並沒有帶走你的空間或換行一邊讀書,但他們得到在寫刪除?爲什麼不使用stringstream工作的二進制文件?

而且,我試圖使用SS >>的std :: noskipws >> S爲:

std::string stringFromChar(char a) { 
    std::stringstream ss(std::stringstream::in | std::stringstream::out | std::stringstream::binary); 
    std::string s; 
    ss << a; 
    ss >> std::noskipws >> s; 
    return s; 
} 

它也沒有工作。爲什麼? s仍然返回爲「」。

回答

1

Aurrgh,這一切似乎非常複雜......

爲什麼不試試這個:

std::string stringFromChar(char a) { 
    return std::string(&a, 1); 
} 

或者這樣:

std::string stringFromChar(char a) { 
    char tmp[2] = { a, 0 }; 
    return std::string(tmp); 
} 

編輯:如果你堅持使用流,試試這個:

std::string stringFromChar(char a) { 
    std::stringstream ss; 
    ss.put(a); 
    return ss.str(); 
} 
+0

這些都是有效的。但我的問題沒有回答。 :(但是,非常感謝:) D – monkeyMoo 2012-08-13 04:07:35

+0

@YatingSheng我認爲問題在於,當你使用'>>'操作符來讀取一個字符串時,字符串的末尾總是被認爲是由空白限定的,所以無論'skipws'標誌被設置,你將得到一個空字符串,因爲讀取操作沒有找到一個字符串,如果你使用'str()'成員來訪問內部字符串(就像你在處理字符串流時應該做的那樣) ),你應該沒有這樣的問題。 – paddy 2012-08-13 04:13:42

+0

啊!得到它!!:D解決!謝謝!! – monkeyMoo 2012-08-13 05:27:02

2

不要讓那麼複雜:

std::string stringFromChar(char a) 
{ 
    return std::string(1,a); 
} 

作爲二次注:
std::ios::binary確實是打開二進制模式的唯一的事情。二進制模式停止將\ n轉換爲/從行終止序列(這是平臺特定的字符序列定義爲行尾)轉換。

+0

是的。簡單*和*快速。(不必要的使用'std :: stringstream'只會讓事情變慢。) – 2012-08-13 04:13:12

+0

那麼'\ n'被認爲是值爲10的字符(這是ASCII碼中的換行符),對不對? 「二進制模式停止'\ n'到行終止序列的轉換\」,那麼它傳遞的是什麼?由於'\ n'仍然代替終止順序? – monkeyMoo 2012-08-13 05:32:33

+0

是的。在二進制模式下沒有轉換。所以10 => 10在兩個方向。 – 2012-08-13 05:36:28

0

使用ss.get(a)從流中獲取每個字符而不跳過空格和新的換行符,其中字符類型爲char