2012-08-13 194 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