我有一个tchar*
,字符串为The system time has changed to 2018 - 09 - 06T15:13 : 52.257364700Z from 2018 - 09 - 06T15 : 13 : 52.257364700Z.
当我将字符串here放在日期值周围时,我看到了字符,当我使用wPrintf
打印该字符串时,在这些位置出现了问号。
是否有一种方法可以遍历tchar*
并删除非ASCII字符?
int main() {
const TCHAR *pText = _T("The system time has changed to 2018 - 09 - 06T15:13 : 52.257364700Z from 2018 - 09 - 06T15 : 13 : 52.257364700Z.");
TCHAR* temp;
temp = removet((TCHAR*)pText, _tcslen(pText));
wprintf(_T("%s"), temp);
}
TCHAR* removet(TCHAR* text, int len) {
int offset = 0;
for (int i = 0; text[i] != 0; ++i) {
if (text[i] > 127) {
offset++;
}
if (!((i + offset) > len)) {
wprintf(_T("%d"), i +offset);
text[i] = text[i + offset];
}
}
return text;
}
更正的代码:
int main() {
const TCHAR *pText = _T("The system time has changed to 2018 - 09 - 06T15:13 : 52.257364700Z from 2018 - 09 - 06T15 : 13 : 52.257364700Z.");
TCHAR* temp;
temp = removet((TCHAR*)pText, _tcslen(pText));
wprintf(_T("%s"), temp);
}
TCHAR* removet(TCHAR* text, int len) {
int offset = 0;
TCHAR* str2 = new TCHAR[len+1];
_tcscpy_s(str2, len+1, text);
for (int i = 0; str2[i] != 0; ++i) {
if (str2[i+offset] > 127) {
offset++;
}
if (!((i + offset) >= len)) {
str2[i] = str2[i + offset];
}
}
return str2;
}
答案 0 :(得分:0)
如果您使用std::string
而不是原始字符数组,这会更容易,但是您仍然可以使用某些c ++功能:
#include <iostream>
#include <string>
#include <cstring>
#include <algorithm>
int main()
{
tchar* test = new tchar[100];
_tcscpy(test, _T("test string 1235"));
tchar* end = std::remove_if(test, test + _tcslen(test), [](tchar ch){ return ch >= 127;} );
*end = '\0';
std::cout << test << "\n";
}
并使用std::basic_string
:
#include <iostream>
#include <string>
#include <algorithm>
int main()
{
std::basic_string<tchar> test = _T("test string 1235");
auto end = std::remove_if(test.begin(), test.end(), [](tchar ch){ return ch >= 127;} );
test.erase(end, test.end());
std::cout << test << "\n";
}