下式给出:
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);
}
答案 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
来调用此函数。