2013-12-15 33 views
0

我在C++的Windows APIWindows API的RichTextBox中添加额外的换行符在C++

做十六进制编辑器我有一个RichTextBox,我能够读取该文件就好了。问题是当我将文件写回去时,richtextbox添加了某种换行符或某种东西,因此该文件不会输出相同的内容。我使用messageboxes来查看特殊字符是什么,它似乎是某种换行符,因为它会在消息框中显示我的十六进制字节,然后在插入特殊字符的部分显示我的十六进制字节一个稍高的消息框。我在6个月前通过汇编程序遇到了这个问题,并通过删除所有十六进制字节“13”来修复它,因为它们在汇编中不是“\ n”。所以我试图删除“\ n”,但它不起作用,我也尝试删除“\ t”,“\ f”,“\ r”,“\ n \ r”,“\ r \ n”和那些不要删除它。这里是我曾经尝试删除特殊字符的代码(我发现它堆栈溢出和它看起来像它的作品,所以我不认为这是错误的代码)

str.erase(std::remove(str.begin(), str.end(), '\n'), str.end()); 

我甚至试着写一个函数,说如果你发现任何“\ n”,“\ t”,“\ f”,“\ r”,“\ n \ r”,“\ r \ n”messagebox me,但它永远不会messageboxed我是一些其他的特殊字符。

所以有人可以请帮我找出特殊字符是什么,所以我可以将其删除

感谢

更新这里是如何从一个RichTextBox删除的换行符在Windows

您必须删除'\ r \ n'和'\ n',这里是将richtextbox的内容读入字符串并删除换行符的代码

textboxlength = GetWindowTextLength(hwndtextbox1); 
GetWindowText(hwndtextbox1, buffert, textboxlength); 
buffer4 = buffert; 
              buffer4.erase(std::remove(buffer4.begin(), buffer4.end(), L'\r\n'), buffer4.end()); 
              buffer4.erase(std::remove(buffer4.begin(), buffer4.end(), L'\n'), buffer4.end()); 

textboxlength是LONGLONG,buffert是TCHAR和buffer4是wstring的

+0

''\ r \ n''是一个多字符文字其中没有很好地定义的行为,所以我认为实际上你只进行了两次搜索,一次搜索“\ r”,第二次搜索“\ n”。没有错,但效率低下。我会添加一些代码给我的答案,你可以尝试。 –

回答

0

Windows使用CR+LF作为标准换行符标记 - 即,两个单独的字符一起 - ASCII 13随后ASCII 10。一个或其他人自己通常不会被认为是换行符。

编辑:下面是一个例子函数从除去CR+LF一个std::string

std::string RemoveLinebreak(std::string input) 
{ 
    const std::string newline("\r\n"); 
    size_t pos = 0; 
    while((pos = input.find(newline, pos)) != std::string::npos) { 
     input.erase(pos, newline.length()); 
    } 
    return input; 
} 
+0

我试过寻找“\ r \ n”和“\ n \ r”,但没有找到它。是我如何寻找CR + LF – user3104964

+0

也许显示代码。 –

+0

我使用GetwindowsText将文本读入TCHAR,然后将TCHAR转换为wstring,然后尝试删除“\ n \ r”,这里是代码----- GetWindowText(hwndtextbox1,buffert,10000000); \t \t \t \t \t \t \t \t \t \t buffer4 = buffert; buffer4.erase(标准::除去(buffer4.begin(),buffer4.end(), '\ n \ R'),buffer4.end()) ; – user3104964

0

为WCHAR '\ n' 为L '\ n' 和 '\ n' 为L '\ n'

所以基本上你应该使用

std::wstring str

str.erase(std::remove(str.begin(), str.end(), 'L\n'), str.end());

std::wstring str;

int pos;

pos=str.find_first_of(Text("\n\r")); if(pos!=std::wstring::nops)str.erase(pos,pos+1);