0

给定:

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);
}
4

1 回答 1

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. 我不记得别名在标准中是如何工作的,因此您可能会或可能不会“合法”地使用destequal to调用此函数src

于 2013-04-25T08:16:14.467 回答