#ifndef UNICODE
#define UNICODE
#endif
#include <Windows.h>
#include <cstring>
#include <cstdio>
int main()
{
TCHAR* greeting = L"HELL\0O W\0ORLD!";
wprintf(L"%s\n",greeting);
_wsystem(L"pause");
return 0;
}
如何删除“问候语”中的所有空字符(尾随除外)?我想避免从头开始创建函数。我的意思是PHP的str_replace的C ++版本。
答案 0 :(得分:7)
不幸的是,在
之后TCHAR* greeting = L"HELL\0O W\0ORLD!";
字符串的长度丢失。运行时只能看到
greeting == L"HELL"; //HA!
您需要存储字符串的长度并手动移动字符。
答案 1 :(得分:2)
这样的事情:
TCHAR greeting[] = L"HELL\0O W\0ORLD!";
TCHAR *writepos = greeting;
for (int i = 0; i < sizeof(greeting) - 1; ++i) {
if (greeting[i] != 0) {
*writepos++ = greeting[i];
}
}
*writepos = 0;
wprintf(L"%s\n",greeting);
重要的是,当您仍然知道数据的长度时,需要删除空字符。我们可以使用sizeof
轻松获取字符串文字的大小(或在我的代码中,文字的副本),其中包括nul终止符。如果输入实际上不是字符串文字,但是从某处读取,则需要知道读取数据的大小。
如果您传递的指针指向没有长度的数据,那么您就完成了。一旦丢失,你就无法恢复它的长度。
C没有标准函数可以从字符串或缓冲区中删除特定字符。 C ++有std::remove_copy_if
,但我希望你没用。