2013-04-25 3 views
0

Я хочу, чтобы проверить, что Edit Control имеет только HEX символы:Как сравнить два w_char [] строки

wchar_t valid_chars[] = { 
    '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 
    'a', 'b', 'c', 'd', 'e', 'f', 
    'A', 'B', 'C', 'D', 'E', 'F', 
    0x08, 0x7f // backspace, del 
}; 

wchar_t buf[80]; // store (wide) text from EDIT Control 

GetDlgItemText(hwnd, IDC_EDT_HEX, buf, 80); 

Итак, теперь текст из моего Edit Control хранится в buf, как бы я идти о том, что buf содержит только символы от valid_chars?

примечание: backspace, del chars в valid_chars необходимы в другом методе, который проверяет нажатия клавиш.

ответ

2
#include <cwchar> 

wchar_t valid_chars[] = { 
    L'0', L'1', L'2', L'3', L'4', L'5', L'6', L'7', L'8', L'9', 
    L'a', L'b', L'c', L'd', L'e', L'f', 
    L'A', L'B', L'C', L'D', L'E', L'F', 
    0x0008, 0x007f, // backspace, del 
    0x0000 
}; 

UINT len = GetDlgItemText(hwnd, IDC_EDT_HEX, buf, 80); 
for (UINT i = 0; i < len; ++i) 
{ 
    if (std::wcschr(valid_chars, buf[i])) 
     // is valid 
    else 
     // is not valid 
} 

В качестве альтернативы:

#include <algorithm> 

wchar_t valid_chars[] = { 
    L'0', L'1', L'2', L'3', L'4', L'5', L'6', L'7', L'8', L'9', 
    L'a', L'b', L'c', L'd', L'e', L'f', 
    L'A', L'B', L'C', L'D', L'E', L'F', 
    0x0008, 0x007f // backspace, del 
}; 
wchar_t *valid_chars_end = &valid_chars[24]; 

UINT len = GetDlgItemText(hwnd, IDC_EDT_HEX, buf, 80); 
for (UINT i = 0; i < len; ++i) 
{ 
    if (std::find(valid_chars, valid_chars_end, buf[i]) != valid_chars_end) 
     // is valid 
    else 
     // is not valid 
} 
Смежные вопросы