병 음 을 입력 하여 주식 의 코드 를 찾다.

다음으로 이동:http://www.cocoachina.com/downloads/video/2011/0415/2790.html
주식 류 앱 에 서 는 사용자 가 번 호 를 기억 하지 못 할 때 도 주식 을 정확하게 찾 을 수 있 도록 주식 검색 / 조회 기능 이 필요 하 다.코코아 차이 나 회원 '야 키' 는 병 음 을 입력 해 주식 을 찾 는 코드 를 공유 해 애플 개발 자 들 에 게 도움 이 되 기 를 희망 했다.
 
- (NSString*)getPinYin:(NSString *)nsstrHZ
{
    NSString* strPY = @"";
    char pinyin[6] =   {0};
    memset(pinyin , 0 , sizeof(pinyin));
    char ch = 0;
    unsigned char high = 0, low = 0;
 
    const char* pszHZ = [nsstrHZ cStringUsingEncoding:gbEncoding];
    for(int i = 0; i < strlen(pszHZ); i++, low = 0)
    {
        high = (unsigned char)(pszHZ[i]);
        if (high < 128 && high != 32 && high != '*')        //     
        {
            ch = (char)high;
            if(ch >= 'a' && ch <= 'z')
                ch -= 32; //Make upper
            strPY = [strPY stringByAppendingFormat:@"%c", ch];
            continue;
        }
 
        if((i+1) < strlen(pszHZ))
            low = (unsigned)(pszHZ[i+1]);
 
        if (high >= 129 && low > 64 )
        {
            switch(high)
            {
                case 163: //        ASCII
                    pinyin[0] = low - 128;        //            ,        
 
                    //        ,  ?
                    //if (pinyin[1] < 48 && pinyin[1] > 57 && pinyin[1] < 65 && pinyin[1] > 90 && pinyin[1] < 97 && pinyin[1] >122)
                    //    strcpy(pinyin,"");  
                    strPY = [strPY stringByAppendingFormat:@"%s", pinyin];    
                    break;
                case 162:    //     
                    if(low > 160)
                        strcpy(pinyin, PYCharIndex[low - 161]);
                    else 
                        strcpy(pinyin, " ");
                    strPY = [strPY stringByAppendingFormat:@"%s", pinyin];    
                    break;
                default: //       ,         
                    if(183 == high && 240 == low) // 
                    {
                        pinyin[0] = 'F';
                    }
                    else
                    {
                        int index = PYCodeIndex[high-129][low-64];  
 
 
                        if (index == 0)  
                            strcpy(pinyin, " "); 
                        else
                        {
                            const char* code = PYCode[index-1]; 
                            pinyin[0] = code[0];                             
                        }
 
                        if (0xB3 == high && 0xA4 == low)    // (" " 0xB3A4)      Chang
                            pinyin[0] = 'C';
 
                        strPY = [strPY stringByAppendingFormat:@"%s", pinyin];    
 
                    }
                    break;  
            }
            i++;
        }
    }
 
    //     
    {
        unsigned char test[8] = {0};
        memset(test, 0 , sizeof(test));
        if(strlen(pszHZ) >= 4)
        {
            memcpy(test, pszHZ, 4);
            if(0xD6 == test[0] && 0xD8 == test[1] && 0xC7 == test[2] && 0xEC == test[3])
            {
                //0xD6D8  0xC7EC 
                const char* ss = [strPY  cStringUsingEncoding:NSASCIIStringEncoding];
                NSString* strTemp = @"";
                strPY = [strTemp stringByAppendingFormat:@"C%s", ss+1];                
            }
            else if(0xCE == test[0] && 0xF7 == test[1] && 0xB2 == test[2] && 0xD8 == test[3])
            {
                //0xCEF7  0xB2D8 
                const char* ss = [strPY  cStringUsingEncoding:NSASCIIStringEncoding];
                NSString* strTemp = @"";
                strPY = [strTemp stringByAppendingFormat:@"XZ%s", ss+2];                
            }            
        }
        else if(strlen(pszHZ) >= 8)
        {
            memcpy(test, pszHZ, 8);
            if(0xD5 == test[0] && 0xD0 == test[1] && 0xC9 == test[2] && 0xCC == test[3] &&
               0xB3 == test[4] && 0xC9 == test[5] && 0xB3 == test[6] && 0xA4 == test[7])
            {
                //0xD5D0  0xC9CC  0xB3C9  0xB3A4 
                const char* ss = [strPY  cStringUsingEncoding:NSASCIIStringEncoding];
                if(4 == strlen(ss))
                    strPY = @"ZSCZ";
                else if(strlen(ss) > 4)                    
                {
                    NSString* strTemp = @"";
                    strPY = [strTemp stringByAppendingFormat:@"ZSCZ%s", ss+4];                
                }                
            }            
        }        
    }
 
    return strPY;
}

    위 코드 에 필요 한 배열 변 수 를 다운로드 합 니 다. 
SymbolSearchController.txt.zip (30 K)

좋은 웹페이지 즐겨찾기