如何过滤wchar_t数组?

时间:2013-04-25 07:47:23

标签: c winapi

下式给出:

wchar_t filter_chars[] = L".+,?=&";
wchar_t haystack[] = L"words+punctuation&special_chars?";

期望的结果:

wordspunctuationspecialchars

如何从给定(unicode)字符串中删除特殊字符?

我正在使用win32 c(没有c ++)

这是我试过的:

void filter(wchar_t str[]) {

    wchar_t buf[80];
    ZeroMemory(buf, 80);

    UINT i, j;

    for(i = j = 0; i < wcslen(str); i++) {
        if (!wcschr(filter_chars, str[i])) {
            wcscpy((wchar_t*)buf[j], (wchar_t*)str[i]);
        }
    }

    wcscpy(str, buf);
}

1 个答案:

答案 0 :(得分:2)

与普通字符串相同:

/*dest must be at least strlen(src) wide*/
wchar_t *filter(wchar_t dest[], wchar_t const src[], wchar_t const filter_chars[])
{
    size_t iSrc=0, iDest=0;
    for(iSrc=0 ; src[iSrc] != L'\0' ; ++iSrc)
    {
        if(NULL == wcschr(filter_chars, src[iSrc]))
            dest[iDest++] = src[iSrc];
    }
    dest[iDest] = L'\0';
    return dest;
}

您还可以为dest添加具有指定缓冲区大小的版本。我不记得标准中的别名是如何工作的,因此您可能会或可能不会“合法”地使用dest等于src来调用此函数。