给定文字形式的电话号码,将号码转换为数字

问题描述 投票:0回答:3

下面的代码可以很好地工作

Input: "two one nine six eight one six four six zero"

Output: "2196816460"
n=s.split()
    l=[]
    for val in n:
        if(val=='zero'):
            l.append('0')
        elif(val=='one'):
            l.append("1")
        elif(val=='two'):
            l.append("2")
        elif(val=='three'):
            l.append("3")
        elif(val=='four'):
            l.append("4")
        elif(val=="five"):
            l.append("5")
        elif(val=="six"):
            l.append("6")
        elif(val=="seven"):
            l.append("7")
        elif(val=="eight"):
            l.append("8")
        elif(val=="nine"):
            l.append("9")
    new = ''.join(l)
    return new

但是如果,

输入:“五八双二双二四八五六”
所需输出应为:5822224856
或者,
输入:“五一零六三八九六四”
所需输出应为:5106888964 上面的代码怎么修改呢?

python list digits
3个回答
4
投票

为数量修饰符创建另一个映射,并将数字字符串乘以前面的修饰符。

digits = {
    "zero": "0",
    "one": "1",
    "two": "2",
    "three": "3",
    "four": "4",
    "five": "5",
    "six": "6",
    "seven": "7",
    "eight": "8",
    "nine": "9",
}

modifiers = {
    "double": 2,
    "triple": 3,
}

number = ""
n = 1
for word in input("? ").split():
    if word in modifiers:
        n *= modifiers[word]
    else:
        number += n * digits[word]
        n = 1
print(number)
? five eight double two double two four eight five six
5822224856

0
投票

您可以使用变量来保存下一个数字的重复次数。

变量以值

1
开头。

当得到重复词(

'triple'
)时,则相应更新变量。

当得到一个数字(

'three'
)时,添加到列表中并将变量更新回
1

您也可以使用字典来代替使用

else..if

repeat = 1
repeat_dict = {'double':2, 'triple':3}:

n=s.split()
l=[]
for val in n:
    if val in repeat_dict:   # got a repeat word
        repeat = repeat_dict[val]
    else:
          
        if(val=='zero'):
            l.append('0' * repeat) 
        elif(val=='one'):
            l.append("1" * repeat)
        elif(val=='two'):
            l.append("2" * repeat)
        elif(val=='three'):
            l.append("3" * repeat)
        elif(val=='four'):
            l.append("4" * repeat)
        elif(val=="five"):
            l.append("5" * repeat)
        elif(val=="six"):
            l.append("6" * repeat)
        elif(val=="seven"):
            l.append("7" * repeat)
        elif(val=="eight"):
            l.append("8" * repeat)
        elif(val=="nine"):
            l.append("9" * repeat)
        repeat = 1
new = ''.join(l)
return new

0
投票
#include <iostream>
#include <string>
#include <sstream>
#include <unordered_map>

using namespace std;

unordered_map<string, string> wordToDigit = {
    {"zero", "0"}, {"one", "1"}, {"two", "2"}, {"three", "3"}, {"four", "4"},
    {"five", "5"}, {"six", "6"}, {"seven", "7"}, {"eight", "8"}, {"nine", "9"}
};

string convertPhoneNumberToDigits(const string& phoneNumberInWords) {
    istringstream iss(phoneNumberInWords);
    string word, previousWord;
    string result = "";

    while (iss >> word) {
        if (word == "double" || word == "triple") {
            previousWord = word;
        } else {
            if (previousWord == "double") {
                for (int i = 0; i < 2; i++) {
                    result += wordToDigit[word];
                }
                previousWord = "";
            } else if (previousWord == "triple") {
                for (int i = 0; i < 3; i++) {
                    result += wordToDigit[word];
                }
                previousWord = "";
            } else {
                result += wordToDigit[word];
            }
        }
    }

    return result;
}

int main() {
    string input= "five one zero two four eight zero double three two";
    // cout << "Enter the phone number in words: ";
    // getline(cin, input);

    string result = convertPhoneNumberToDigits(input);
    cout << "Phone number in digits: " << result << endl;

    return 0;
}
© www.soinside.com 2019 - 2024. All rights reserved.