天天看點

華為機試——表示數字

題目描述

将一個字元中所有出現的數字前後加上符号“*”,其他字元保持不變

 public static String MarkNum(String pInStr)

 {

  return null;

 }

輸入描述:

輸入一個字元串

輸出描述:

字元中所有出現的數字前後加上符号“*”,其他字元保持不變

示例1

輸入

Jkdi234klowe90a3      

輸出

Jkdi*234*klowe*90*a*3*      

思路:前後如果分别是數字和字母就需要添加*,需要考慮的三種特殊情況是:1.第一個是數字,最後一個是字母;2.第一個是字母,最後一個是數字;3.第一個和最後一個都是數字。

def func(str1):
    loc = []
    res = ""
    if(len(str1)==1):
        if(str1[0]<='9' and str1[0]>='0'):
            return '*'+str1+'*'
        else:
            return str1
    else:
        for i in range(len(str1)-1):
            pre = str1[i]
            aft = str1[i+1]
            if((pre>'9' and (aft<='9' and aft>='0')) or (aft>'9' and (pre<='9' and pre>='0'))):
                loc.append(i)
        for i in range(len(str1)):
            if(i in loc):
                res = res +  str1[i] + "*"
            else:
                res = res + str1[i]
        if(len(loc)%2!=0):
            if(res[0] > '9'):
                res = res + '*'
            else:
                res = '*' + res
        if(res[0]>='0' and res[0]<='9' and res[len(res)-1]>='0' and res[len(res)-1]<='9'):
            res = '*' + res + '*'
    return res
while True:
    try:
        str1 = input()
        print(func(str1))
    except:
        break