如何修剪const wchar_t *?

时间:2015-09-15 09:00:27

标签: c++

const wchar_t*看起来像"\n\t\t\t\tsomething\n\t\t\t\t",我希望得到"something"。最有效的方法是什么?

[编辑] 我已经找到了类似的东西:

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类帮助了很多。我希望这是一个很好的答案。 XMLString是来自Xercesc库的类。

2 个答案:

答案 0 :(得分: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*返回到某个未定义的临时缓冲区。我假设你的XMLStr没有在某个全局分配器中管理内存。

答案 1 :(得分:0)

你需要新的变量来存储字符,所以首先只是迭代你的字符串并找到非空白字符的第一个和最后一个出现。您可以使用两个指针并从字符串的开头和结尾进行迭代。然后您可以使用此函数复制字符串:

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

您可以在此处找到说明:C++ Reference - wcscpy