문자열 찾기 (와일드카드 *,?) 지원 함수 > WIP

본문 바로가기
사이트 내 전체검색


회원로그인

WIP

WIP | 문자열 찾기 (와일드카드 *,?) 지원 함수

페이지 정보

작성자 CmdList 작성일17-07-15 17:45 조회340회 댓글0건

본문

^ : 처음,   문자열이나 행의 처음을 의미합니다.
$ : 끝,      문자열이나 행의 끝을 의미합니다.

? : 문자,   1개의 문자와 일치하는 것을 찾습니다.

* : 임의문자, 여러 문자와 일치하는 것을 찾습니다.

 

사용 예

^text$ : 정확한 "text" 문자열을 찾습니다. text (O), text1, 1text (X)

^wh : "wh"로 시작하는 문자열을 찾습니다. what, white, why (O), watch (X)

42$ : "42"로 끝나는 문자열을 찾습니다. 1942 (O), 1943 (X)

b?ll : "b"로 시작하고 문자 1자와 "ll"로 끝나는 문자열을 찾습니다. ball, bell, bill (O)

^w*t$ : "w"로 시작하고 "t"로 끝나는 문자열을 찾습니다. what (O), white (X)
 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
bool wild_match(const wchar_t *text, const wchar_t *pattern)
{
    while (*pattern)
    {
        if (*pattern == L'?')
        {
            if (*text == L'\0')
                return false;
            ++text;
            ++pattern;
        }
        else if (*pattern == L'*')
        {
            if (wild_match(text, pattern+1))
                return true;
            if (*text && wild_match(text+1, pattern))
                return true;
            return false;
        }
        else
        {
            if (std::towlower(*text++!= std::towlower(*pattern++))
                return false;
        }
    }
    return (*text == L'\0'&& (*pattern == L'\0');
}
 
const wchar_t * GetSearchText(void)
{
    g_SearchText = g_SearchEdit;
    if (!g_SearchText.empty())
    {
        if (g_SearchText.front() == L'^')
            g_SearchText.erase(g_SearchText.begin());
        else
            g_SearchText.insert(0, L"*"); 
        if (g_SearchText.back() == L'$')
            g_SearchText.pop_back();
        else
            g_SearchText.append(L"*");
    }
    return g_SearchText.c_str();
}
 
// in functions()...
    if (wcslen(GetSearchText()) > 0)
    {
        std::wstring fullname = osd::text::to_wstring(driver_list::driver(nGame).type.fullname());
        std::wstring name     = osd::text::to_wstring(driver_list::driver(nGame).name);
        // pick the best match between driver name and description
        if (wild_match(fullname.c_str(), GetSearchText()) == false &&
            wild_match(name.c_str(),     GetSearchText()) == false)
            return true;
    }
cs

댓글목록

등록된 댓글이 없습니다.

WIP 목록

게시물 검색

Copyright © cmdlist.com. All rights reserved.
(Today : 8 / Total : 14,757)

Top