从cstring中删除空字符

时间:2012-05-24 17:01:19

标签: c

#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 ++版本。

2 个答案:

答案 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,但我希望你没用。