如何修剪const wchar_t*

How to trim const wchar_t*?

本文关键字:wchar const 何修剪 修剪      更新时间:2023-10-16

我有const wchar_t*看起来像"nttttsomethingntttt",我想得到"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库中的一个类。

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

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

你可以在这里找到描述:c++ Reference - wcscpy

将const wchar_t*复制到std::wstring,然后使用What's 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没有在某些全局分配器中管理内存