Exemplo n.º 1
0
        string intToRoman(int num) {
            string ans;
            int weight = 0;
            while (num) {
                ans = getRoman(num % 10, weight++) + ans;
                num /= 10;
            }

            return ans;
        }
Exemplo n.º 2
0
 string intToRoman(int num) {// 几千+ 几百+ 几十 + 几
     string ret="";
    vector<int> num2;
    while(num){
        num2.push_back(num%10);
        num=num/10;
    }
    //num2 存的是ix:0个位,ix:3 千位
    for(int i=num2.size()-1;i>=0;--i){//先算千位表达式再百位十位
        if(i==3){//千位
            ret+=getRoman(num2[i],"M","","");
        }
        if(i==2){//百位
            ret+=getRoman(num2[i],"C","D","M");
        }
        if(i==1){//十位
            ret+=getRoman(num2[i],"X","L","C");
        }
        if(i==0){//个位
            ret+=getRoman(num2[i],"I","V","X");
        }
    }
    return ret;
 }
Exemplo n.º 3
0
/** メインスレッド */
void ImeServer::service()
{
    uintptr_t targetID = MonAPI::Message::lookupMainThread("MONITOR.BIN");
    if (targetID == THREAD_UNKNOWN) {
        printf("IME: Monitor server not found\n");
        exit(1);
    }

    if (MonAPI::Message::send(targetID, MSG_STARTED, 0, 0, 0, NULL)) {
        printf("IME: Server start failed\n");
        exit(1);
    }

    // 辞書が読めなかったときはかな漢字変換はすべて失敗を返す
    bool dicLoaded = loadDictionary();

    MessageInfo info;
    while (1) {
        if (!MonAPI::Message::receive(&info)) {
            switch(info.header) {
            case MSG_IMESERVER_GETKANJI:
                {
                    HList<MonAPI::CString> result;
                    int hit = getKanji(info.str, &result);

                    // MSG_IMESERVER_GETKANJI
                    // arg2: ヒット数
                    if (dicLoaded == true) {
                        MonAPI::Message::reply(&info, hit, 0, NULL);
                    } else {
                        MonAPI::Message::reply(&info, 0, 0, NULL);
                    }

                    if (dicLoaded == true && hit > 0) {
                        // MSG_IMESERVER_STARTKANJI
                        // arg1: ヒット数
                        MonAPI::Message::sendReceive(&info, info.from, MSG_IMESERVER_STARTKANJI, hit, 0, 0, NULL);

                        for (int i = 0; i < hit; i++) {
                            // MSG_IMESERVER_KANJI
                            // arg1: ヒット数
                            // arg2: カウンタ
                            // str : よみ→漢字
                            MonAPI::Message::sendReceive(&info, info.from, MSG_IMESERVER_KANJI, hit, i, 0, (const char*)result.get(i));
                            //printf("%d: %s\n", i, (const char*)result.get(i));
                        }

                        // MSG_IMESERVER_ENDKANJI
                        // arg1: ヒット数
                        MonAPI::Message::sendReceive(&info, info.from, MSG_IMESERVER_ENDKANJI, hit, 0, 0, NULL);
                    }
                }
                break;
            case MSG_IMESERVER_GETYOMI:
                {
                    // MSG_IMESERVER_GETYOMI
                    // arg2: 0-失敗 1-成功
                    // str : 漢字→よみ
                    char result[MAX_TEXT_LEN];
                    if (dicLoaded == true && getYomi(info.str, result) == true) {
                        strncpy(info.str, result, MAX_TEXT_LEN);
                        MonAPI::Message::reply(&info, 1, 0, result);
                    } else {
                        strncpy(info.str, "", MAX_TEXT_LEN);
                        MonAPI::Message::reply(&info, 0, 0, "");
                    }
                }
                break;
            case MSG_IMESERVER_GETKANA:
                {
                    // MSG_IMESERVER_GETKANA
                    // arg2: 0-失敗 1-成功
                    // str : 入力文字→かな
                    char result[MAX_TEXT_LEN];
                    if (getKana(info.str, result) == true) {
                        strncpy(info.str, result, MAX_TEXT_LEN);
                        MonAPI::Message::reply(&info, 1, 0, result);
                    } else {
                        strncpy(info.str, "", MAX_TEXT_LEN);
                        MonAPI::Message::reply(&info, 0, 0, "");
                    }
                }
                break;
            case MSG_IMESERVER_GETROMAN:
                {
                    // MSG_IMESERVER_GETROMAN
                    // arg2: 0-失敗 1-成功
                    // str : かな→入力文字
                    char result[MAX_TEXT_LEN];
                    if (getRoman(info.str, result) == true) {
                        strncpy(info.str, result, MAX_TEXT_LEN);
                        MonAPI::Message::reply(&info, 1, 0, result);
                    } else {
                        strncpy(info.str, "", MAX_TEXT_LEN);
                        MonAPI::Message::reply(&info, 0, 0, "");
                    }
                }
                break;
            }
        }
    }
}