首页 > 试题广场 >

表示数字

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

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


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

输入描述:

输入一个字符串



输出描述:

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

示例1

输入

Jkdi234klowe90a3

输出

Jkdi*234*klowe*90*a*3*
不那么聪明的解法,分情况讨论
str1 = input()

res = ''

for i in range(len(str1)):
    if i == 0:
        if str1[i].isdigit() and str1[i+1].isdigit():
            res = res + '*' + str1[i]
        elif str1[i].isdigit() and not str1[i+1].isdigit():
            res = res + '*' + str1[i] + '*'
        else: 
            res = res + str1[i]
    elif i == len(str1)-1:
        if str1[i].isdigit() and not str1[i-1].isdigit():
            res = res + '*' + str1[i] + '*'
        elif str1[i].isdigit() and str1[i-1].isdigit():
            res = res + str1[i] + '*'
        else:
            res = res + str1[i]
    else:
        if str1[i].isdigit() and not str1[i-1].isdigit() and str1[i+1].isdigit():
            res = res + '*' + str1[i]
        elif str1[i].isdigit() and str1[i-1].isdigit() and not str1[i+1].isdigit():
            res = res + str1[i] + '*'
        elif str1[i].isdigit() and not str1[i-1].isdigit() and not str1[i+1].isdigit():
            res = res + '*'+str1[i] + '*'
        else:
            res = res + str1[i]
print(res)

发表于 2024-07-02 16:25:33 回复(0)
import re
str = input()
str1 = ' '
str1 = re.sub(r'(\d+)', r'*\1*',str)
print(str1)

编辑于 2024-03-21 20:42:37 回复(0)
while True:
    try:
        n = input()
        n1 = ''#接收整个序列
        n2 = '' #接收序列增长的那一个元素
        for i in n:
            if i.isdigit():# i是数字
                if not n2.isdigit():# i前一个不是数字,序列加*后再加i
                    n1 += '*'
            else:
                if n2.isdigit():# i不是数字,i前一个是数字,序列加*后再加i
                    n1 += '*'
            n1 += i
            n2 = i #每次接收序列增长的那一个元素,直到遍历完,接收最后一个元素
        if n2.isdigit():#判断最后一个元素是否是数字,是的话啊需要最后加上*
            n1 += '*'
        print(n1)
    except:
        break

编辑于 2024-01-04 17:58:51 回复(0)
# 利用双指针
data = input()
left,right = 0,0
ans =''
while left<len(data):
    if not data[left].isdigit():
        ans+=data[left]
        left+=1
        continue
        else:
            right = left
            while right<len(data) and data[right].isdigit():
                right+=1
                ans = ans+'*'+data[left:right]+'*'
                left=right
                print(ans)

发表于 2023-11-30 09:25:11 回复(1)
import re

while True:
    try:
        s = input().strip()
        # pattern = r"\d+"
        new_s = re.sub(r"(\d+)", "*\\g<1>*", s)
        print(new_s)
    except:
        break
发表于 2023-11-29 16:46:40 回复(1)
def add_sign(s: str) -> str:
    flag, pre_flag = 0, 0
    s_list = list(s)
    loca = []
    for i in range(len(s_list)):
        if s_list[i].isdigit():
            flag = 1
            if not pre_flag:
                loca.append(i)
        else:
            flag = 0
            if pre_flag:
                loca.append(i)
        pre_flag = flag
   
    for i in range(len(loca)):
        s_list.insert(loca[i] + i, '*')

    if flag:
        s_list.append('*')
    return ''.join(s_list)

if __name__ == '__main__':
    st = input()
    print(add_sign(st))


菜鸡写法,找的是添加*的位置。
发表于 2023-11-27 21:59:16 回复(0)
import re

print(re.sub(r'\d+', r'*\g<0>*', input()))

发表于 2023-11-01 22:10:14 回复(0)

line=input()
result=""
curIsNums=False
for i in line:
    if i not in "1234567890":
        if curIsNums:
            result+="*"
            result+=i
            curIsNums=False
        else:
            result+=i
            curIsNums=False
    else:
        if not curIsNums:
            result+="*"
            result+=i
            curIsNums=True
        else:
            result+=i
            curIsNums=True

if result[-1] in "1234567890":
    result+="*"

if result[0] in "1234567890":
    result = "*"+result

print(result)
发表于 2023-10-22 10:35:15 回复(0)
int_number = [str(i) for i in range(10)]

input_str = list(input())

for i in range(len(input_str)):
    if input_str[i] in int_number:
        if i == 0:
             input_str[i] = "*" + input_str[i]
        else:
            if input_str[i-1][-1] not in int_number:
               input_str[i] = "*" + input_str[i]
        if i == len(input_str)-1:
            input_str[i] = input_str[i] + "*"
        else:
            if input_str[i+1] not in int_number:
                input_str[i] = input_str[i] + "*"
        
for c in input_str:
    print(c, end="")


# for c in input_str:
#     if c not in int_number:
        

发表于 2023-09-30 16:35:45 回复(0)
strr = input()
output = ''
if strr[0].isdigit():
    output += '*' + strr[0]
    if strr[1].isdigit() == False:
        output += '*'
else:
    output += strr[0]
for i in range(1,len(strr)-1):
    if strr[i].isdigit() and strr[i-1].isdigit()==False:
        output = output + '*' + strr[i]
    else:
        output = output + strr[i]
    if strr[i].isdigit() and strr[i+1].isdigit() == False:
        output += '*'
if len(strr)>=2:
    if strr[-1].isdigit():
        if strr[-2].isdigit():
            output += strr[-1] +'*'
        else:
            output += '*'+ strr[-1] +'*'
    else:
        output += strr[-1]
print(output)

发表于 2023-09-24 17:38:49 回复(0)
想不出很好的办法,分情况讨论
s = input()
res = ""
for i in range(len(s)):
    # 如果不是数字
    if not s[i].isdigit():
        # 如果res为空,或res最后一个字符不是数字
        if not res&nbs***bsp;not res[-1].isdigit():
            res += s[i]
        else:
            res += '*'+s[i]
    # 如果是数字
    else:
        # 如果res为空,或者 res最后一个字符不是数字
        if not res&nbs***bsp;not res[-1].isdigit():
            res+= '*'+s[i]
        else:
            res += s[i]
# 如果最后一位是数字的话
if s[-1].isdigit():
    res+='*' 

print(res)



发表于 2023-07-05 21:19:08 回复(1)
def is_num(num):
    if "0" <= num <= "9":
        return True
    else:
        return False
   

stry = input()
k = 0
i = 0
while i < len(stry):
    if k == 0:
        if is_num(stry[i]):
            stry = stry[0:i] + "*" + stry[i:]
            i = i + 1
            k = 1
        else:
            i += 1
    if k == 1:
        if not is_num(stry[i]):
            stry = stry[0:i] + "*" + stry[i:]
            i = i + 1
            k = 0
        else:
            i += 1

if is_num(stry[-1]):
    stry += "*"

print(stry)

发表于 2023-06-11 12:51:08 回复(0)
这题关键是选择合适的存储字符串的方法,我选择列表来分开存储,这样加字符串后索引也不会变,非常方便
a=input("")#本题用列表来单独存字符串比较好
l=len(a)#字符串长度
b=[]
for i in range(l):
   b.append(a[i])#把字符串拆分存入列表b中,接下来只需要操作列表b###用列表处理字符串是非常好用的方法,因为不用考虑插入字符后索引的变化
i=0
while i<l:#开始判断遇到的数字串,在数字串起始位置前面加*,终点位置后面加*
   try:
      if int(b[i]) or int(b[i])==0:#是数字就继续数字串的判断
         start=int(i)#记录数字串起始位置
         while True:
            try:
               if int(b[i+1]) or int(b[i+1])==0:#下个位置也是数字
                  t=i+1#作为记录位置的指针或者索引
                  i=t#记录位置当前位置
            except ValueError:#发现下个位置不是数字
               end=int(i)#记录数字串终止位置,也是数字串最后一位数字的
               break
            except IndexError:#最后一位是数字,再执行这个while循环就会索引异常
               end=int(i)
               break
   except ValueError:#不是数字就下一波
      i+=1
      continue#本身对应位置已经存好了非数字字符,什么都不用做,直接到下一跳就行
   else:
      i=end+1
      b[start]="*"+b[start]
      b[end]=b[end]+"*"
print(''.join(b))#最后一步

发表于 2023-05-31 14:37:27 回复(0)
a = input()
if a[0].isdigit():#如果第一位是数字
    print('*',end='')
for i in range(0,len(a)-1):
    print(a[i],end='')
    if a[i].isdigit() == False and a[i+1].isdigit():#当前不是数字,但下一位是数字
        print('*',end='')
    if a[i].isdigit() and a[i+1].isdigit() == False:#当前是数字,但下一位不是数字
        print('*',end='')
print(a[-1],end='')
if a[-1].isdigit(): #如果最后一位是数字
    print('*',end='')

发表于 2023-04-17 17:02:50 回复(0)
# 笨办法
s = input()
n = list(map(str,list(range(10))))
ls = []
if s[0] in n:
    ls.append('*')
for i in range(len(s)-1):
    ls.append(s[i])
    if ((s[i] not in n) and (s[i+1] in n))&nbs***bsp;((s[i] in n) and (s[i+1] not in n)):
        ls.append('*')
  
if s[-1] not in n:
    ls.append(s[-1])
else:
    ls.append(s[-1])
    ls.append('*')
print(''.join(ls))

发表于 2023-04-07 21:23:29 回复(0)
s = input()
new_s = ""
pre_s = ""
for i in s:
    if i.isdigit() == False:
        if pre_s.isdigit():
            new_s += "*"
    if i.isdigit():
        if pre_s.isdigit() == False:
            new_s += "*"
    new_s += i
    pre_s = i
if i.isdigit():
    new_s += "*"
print(new_s)

发表于 2023-03-21 22:25:03 回复(0)
a=input()
b=list(a)
i=0
j=-1
while i<=len(b):
    try:
        
        if i==len(b) and b[j].isdigit():
            b.append('*')
            i+=1
            j+=1
        elif b[i].isdigit() and j==-1:
            b.insert(i,'*')
            i+=2
            j+=2
        elif j==-1 and not b[i].isdigit():
            i+=1
            j+=1
        elif b[i].isdigit() and not b[j].isdigit():
            b.insert(i,'*')
            i+=2
            j+=2
        elif not b[i].isdigit() and b[j].isdigit():
            b.insert(i,'*')
            i+=2
            j+=2
        else:
            i+=1
            j+=1
    except:
        break
for i in b:
    print(i,end='')
超级笨办法
发表于 2023-03-05 20:46:23 回复(0)
s = input()
l = r = 0
ans = ''
while r < len(s):
    if not s[r].isdigit():#如果不是数字
        #开始结算上一个连续数字区间
        num_len = r-l #没有连续数字时这个变量为0
        if num_len != 0:
            ans += '*' + s[l:r] +'*'
        l = r #左指针复位
        ans += s[l]
        r += 1
        l += 1
    else:
        r += 1
if l != r:
    ans += '*' + s[l:r] +'*'
print(ans)

发表于 2023-02-20 16:15:13 回复(0)
a = input()
a = "xx" + a + "xx"
b = []
j = 0
for i in range(len(a) - 1):
    t0, t1 = a[i].isdigit(), a[i + 1].isdigit()
    if t0.__xor__(t1):
        b.append(a[j : i + 1])
        j = i + 1
b.append(a[j:])
print("*".join(b)[2:-2])

发表于 2023-02-04 20:56:30 回复(0)