2015-09-15 42 views
0

我有const wchar_t*看起来像"\n\t\t\t\tsomething\n\t\t\t\t",我想要"something"。什么是最有效的方法呢?如何修剪const wchar_t *?

[编辑] 我已经制定了这样的事:它已经存在在我的项目

typedef wchar_t XMLCh 

const XMLCh* trimTabs(const XMLCh* text) 
{ 
string dest = XMLString::transcode(text); 
dest.erase(remove(dest.begin(),dest.end(),'\t'), dest.end()); 
dest.erase(remove(dest.begin(),dest.end(),'\n'), dest.end()); 
return XMLStr(dest.c_str()).getXMLStr(); 
} 

XMLStr类帮助MI很多。我希望这是很好的答案。 XMLString是Xercesc库中的一个类。

+2

如果它是常量,你想你的结果是空值终止,那么你有没有其他的选择,而不是制作结果字符串的副本。 – Medinoc

+3

C或C++?这些是不同的语言,它们的方式非常不同。选一个。 – Angew

+0

你是对的,@Angew。我选择了C++;) – Adek

回答

0

将您的const wchar_t *复制到std :: wstring,然后使用What's the best way to trim std::string?中的一种方法修剪它。你不能修剪const wchar_t*,它必须被复制。

对您更新的问题的补充评论。使用下面的功能签名是不可能完成你想要的。

const XMLCh* trimTabs(const XMLCh* text) 

我不知道你的代码的其余部分的样子,但在这里你可以做的最好的就是更改为:

string trimTabs(const XMLCh* text) 
{ 
string dest = XMLString::transcode(text); 
dest.erase(remove(dest.begin(),dest.end(),'\t'), dest.end()); 
dest.erase(remove(dest.begin(),dest.end(),'\n'), dest.end()); 
return string(XMLStr(dest.c_str()).getXMLStr()); 
} 

否则你正在返回const wchar_t*一些临时缓冲区是未定义behaviur。我在这里假设你的XMLStr没有管理某些全局分配器中的内存。

0

您将需要新的变量来存储字符,因此首先迭代您的字符串并查找非空白字符的第一个和最后一个出现位置。您可以使用两个指针并从字符串的开头和结尾迭代。然后你就可以使用这个功能来复制字符串:

wchar_t* wcscpy (wchar_t* destination, const wchar_t* source); 

您可以在这里找到的描述:C++ Reference - wcscpy