View Code of Problem 16

#include <iostream>
#include "string"
#include "vector"

using namespace std;

/**
 * kkmd66 四刷
 * @param number_char 
 * @param number_str 
 * @param temp 
 * @return 
 */

char isEnglish(const vector<char> &number_char, const vector<string> &number_str, const string &temp) {

    //找是否是英文
    for (int i = 0; i < number_str.size(); ++i) {
        //是英文
        if (number_str[i] == temp) {
            return number_char[i];
        }
    }

    //不是英文
    return '#';
}

/**
 * kkmd66 四刷
 * @return 
 */

int main() {

    vector<char> number_char{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
    vector<string> number_str{"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"};

    int T;
    cin >> T;
    while (T--) {

        //何种方式输出
        int flag_out;
        cin >> flag_out;

        //最终加数,最终结果
        int plus_1_int, plus_2_int, result;

        //temp临时接收,plus_1_str第一个加数,plus_2_str第二个加数
        string temp, plus_1_str, plus_2_str;

        //第一个加数
        while (cin >> temp && temp != "+") {
            char flag_english = isEnglish(number_char, number_str, temp);
            //如果是英文
            if (flag_english != '#') {
                plus_1_str += flag_english;
            }//不是英文
            else {
                plus_1_str = temp;
            }
        }
        plus_1_int = atoi(plus_1_str.c_str());

        //第二个加数
        while (cin >> temp && temp != "=") {
            char flag_english = isEnglish(number_char, number_str, temp);
            //如果是英文
            if (flag_english != '#') {
                plus_2_str += flag_english;
            }//不是英文
            else {
                plus_2_str = temp;
            }
        }
        plus_2_int = atoi(plus_2_str.c_str());

        //结果
        result = plus_1_int + plus_2_int;

        //输出
        if (flag_out) {
            //是英文
            string result_str = to_string(result);
            //依次找result_str每一个数字匹配的英文
            for (int i = 0; i < result_str.size(); ++i) {
                for (int j = 0; j < number_char.size(); ++j) {
                    //找到相同的字符
                    if (result_str[i] == number_char[j]) {
                        //不是最后一个(不换行)
                        if (i != result_str.size() - 1)
                            cout << number_str[j] << " ";
                        //最后一个换行
                        else
                            cout << number_str[j] << endl;
                        //找到直接打断
                        break;
                    }
                }
            }
            //输出数字
        } else
            cout << result << endl;
    }

    return 0;
}

Double click to view unformatted code.


Back to problem 16