首页 > 试题广场 >

表示数字

[编程题]表示数字
  • 热度指数:178383 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

将一个字符串中所有的整数前后加上符号“*”,其他字符保持不变。连续的数字视为一个整数。


数据范围:字符串长度满足

输入描述:

输入一个字符串



输出描述:

字符中所有出现的数字前后加上符号“*”,其他字符保持不变

示例1

输入

Jkdi234klowe90a3

输出

Jkdi*234*klowe*90*a*3*
虽然很别扭,但还是一行解决了,核心是将数字两边加汉字'牛',将出现的'牛牛'删除,出现的'牛'替换为'*'
print(''.join(['牛'+i+'牛' if i.isdigit() else i for i in input()]).replace('牛牛','').replace('牛','*'))

发表于 2024-04-15 14:38:03 回复(0)

s0 = []

for i in range(len(s)):
    s0.append(s[i])
    if s[i].isdigit():
        if i == 0:
            s0.insert(0, '*')
        elif (s[i - 1].isdigit()) == False:
            s0.insert(len(s0) - 1, '*')
    else:
        if i == 0:
            continue
        elif s[i - 1].isdigit():
            s0.insert(len(s0) - 1, '*')

if s0[len(s0) - 1].isdigit():
    s0.append('*')

for c in s0:
    print(c, end='')
编辑于 2024-03-01 12:37:53 回复(0)
S=[x for x in input()]
S1=[x for x in S]
n=0
insert_num=0
for i in range(len(S1)):
    if S1[i].isdigit()==True:
        n+=1
        # 一组数字的开头插入*
        if n==1:
            S.insert(insert_num+i,'*')
            insert_num+=1
        else:
            if i<len(S1)-1:
                continue
        #字符串最后一组是数字
        if n>0 and i==len(S1)-1:
            S.append('*')
    else:
        #非末尾的一组数字结束后插入*
        if n>0:
            S.insert(insert_num+i,'*')
            insert_num+=1
        n=0
print("".join(S))

发表于 2023-02-02 13:17:42 回复(0)
正则表达式yyds
import re


string = input()
my_str = re.sub('([0-9]+)',r'*\1*',string)
print(my_str)


发表于 2022-12-27 21:41:17 回复(0)
while True:
    try:
        s = input()
        ls = [] # 用可变的列表来存储输出
        for i in range(len(s)):
            if not s[i].isnumeric():
                ls.append(s[i])
            else:
                if (not s[i-1].isnumeric())&nbs***bsp;i==0: # 注意包含第一个字符就是数字的情况
                    ls.append('*')
                    for j in range(i, len(s)):
                        if s[j].isnumeric():
                            ls.append(s[j])
                        else:
                            ls.append('*')
                            break              
            
        if ls[len(ls)-1].isnumeric(): # 检验最后一个字符是否为数字
            ls.append('*')
        print(*ls, sep='')
    except:
        break

发表于 2022-09-16 18:24:07 回复(0)
import re
while True:
    try:
        s = input()
        new = re.sub("(\d+)",'*\g<1>*',s)
        print(new)
    except:
        break
发表于 2022-09-04 07:48:19 回复(0)
笨办法,四种情况判断
import sys
input_list = [] 
for line in sys.stdin:
    a = line.split()
    input_list.append(a)
    
string_input = input_list[0][0]
#first_sign用来标记当遇到第一个数字的情况
first_sign = 0
point=0
while(point < len(string_input)):
    #如果遇到数字,并且标记为0,说明第一次进入,需要前置增加一个星号,并改变标记为1
    if(first_sign == 0 and string_input[point].isdigit()):
        string_input = string_input[:point] + "*" + string_input[point:]
        first_sign = 1
        point = point+1
    #如果遇到数字,并且标记为1,说明处于连续数字区间,直接移动
    elif(first_sign == 1 and string_input[point].isdigit()):
        point = point+1
    #如果没有遇到数字,并且标记为1,说明刚刚走出连续数字区间,要给上一位增加星号
    elif(first_sign == 1 and not string_input[point].isdigit()):
        string_input = string_input[:point] + "*" + string_input[point:]
        first_sign = 0
        point = point+1
    #如果没有遇到数字,并且标记为0,普通情况,直接+1
    elif(first_sign == 0 and not string_input[point].isdigit()):
        point = point +1
#上面的处理是没有考虑数字在最后的,需要额外判断
if(string_input[-1].isdigit()):
    string_input = string_input+"*"
print(string_input)


发表于 2022-08-21 19:58:02 回复(0)
s = input()
l = []  # 新建列表,依次加入并判断是否加星
if s[0].isdigit():
    l.append('*' + s[0])
else:
    l.append(s[0])  # 先判断第一位

for i in range(1,len(s)):
    if s[i - 1].isdigit() and not s[i].isdigit():  # 前数本非数,等于数尾加星
        l.append('*' + s[i])
    elif not s[i - 1].isdigit() and s[i].isdigit():  # 前非本数,等于数前加星
        l.append('*' + s[i])
    else:
        l.append(s[i])  # 前数本数不变,前非本非不变
if s[-1].isdigit():
    l.append('*')  # 尾数加星,尾非数不加
print(''.join(l))

发表于 2022-07-04 19:34:12 回复(0)
import re
s = input()
regex = r"([0-9]+)"
pattern = r"*\1*"
print(re.sub(regex, pattern, s))
发表于 2022-07-04 17:12:10 回复(0)
while True:
    try:
        data = input()
        res =[]
        for x in data:
            if x.isdigit():
                res.append('1 *'+x+'1 *')
            else:
                res.append(x)
        print(''.join(res).replace('1 *1 *', '').replace('1 *', '*'))
        
    except:
        break

将每个数字都换成带*的特殊字符,然后再替换掉重叠的字符和特定的字符
发表于 2022-07-02 19:49:19 回复(0)
Input= input()
b=[]
for i in Input:
    if i == '*':  #遇到*用###替换
        b.append('###')
    elif i.isdigit():
        b.append(f'*{i}*') #遇到数字,直接前后加上*,如23变成2**3,后面处理
    else:
        b.append(i)
c = ''.join(b).replace('**','')  #处理之前的23问题
d = c.replace('###','*') #之前*换成###,现在换回来
print(d)
发表于 2022-07-01 00:06:27 回复(0)
s=str(input())
l=[]
for i in range(len(s)):
    if s[i].isdigit():
        l.append('$'+s[i]+'$')
    else: l.append(s[i])
x=''
for j in l:
    x+=j
#&nbs***bsp;x=''.join(l)

#if '**' not in s:
#    x=x.replace('**','')
#    print(x)
#else: print(x)

#特殊情况2种
#example 1**3
#example Y1^*6**26*

x=x.replace('$$','')
x=x.replace('$','*')
print(x)


发表于 2022-06-16 18:01:38 回复(0)
import re

while True:
    try:
        s0 = input()       
        print(re.sub(r'(\d+)', '*\g<1>*', s0))
    except:
        break
发表于 2022-05-31 13:16:21 回复(0)
while True:
    try:
        a=input()
        b=[i for i in a]
        n=0
        for i in range(len(a)):
            if a[i].isdigit():
                if  i==0:
                    b.insert(0,'*')
                    n+=1
                if  i!=0:
                    if a[i-1].isdigit()==False:
                        b.insert(i+n,'*')
                        n+=1
                if  i!=len(a)-1:
                    if a[i+1].isdigit()==False:
                        b.insert(i+n+1,'*')
                        n+=1
                if  i==len(a)-1:
                        b.insert(i+n+1,'*')
                        n+=1       
                    
        print (''.join(b))
    except Exception as a :
        break
        

    

发表于 2022-05-30 19:30:45 回复(0)
s = list(input())
ls =[]
for i in range(len(s)):

    if s[i]=='*':
        ls.append('星')
    elif s[i].isdigit()== False:
        ls.append(s[i])
    elif s[i].isdigit()== True:  #将数字两边添加‘*’
        ls.append('*')
        ls.append(s[i])
        ls.append('*')


a = ''.join(ls).replace('**', '')#如果是连续数字,中间会出现“**”,此时用replace除去
print(a.replace('星', '*')) #为防止原字符串有**被删除,先用‘星’代替,删除新增的**后再替换
发表于 2022-05-28 22:47:29 回复(0)
import re
while True:
    try:
        s = input()
        res = re.findall('\d*', s)
        res.pop()
        l = []
        n=0
        for i in range(len(res)):
            if len(res[i]) == 0:
                l.append(s[i+n])
            else:
                l.append('*')
                l.append(res[i])
                l.append('*')
                n = n + len(res[i])-1
        print(''.join(map(str,l)))
    except:
        break

发表于 2022-05-25 10:29:39 回复(0)
def fun():
    a = input()
    b = ""
    for i in a:
        if "0" <= i <= "9":
            b += '"{}"'.format(i)
        else:
            b += i
    print(b.replace('""', "").replace('"', "*"))

if __name__ == "__main__":
    fun()
发表于 2022-05-22 01:05:21 回复(0)