zoukankan      html  css  js  c++  java
  • 0505---练习题

    #习题12:自定义实现rfind

    Python rfind() 返回字符串最后一次出现的位置,如果没有匹配项则返回-1。

    rfind()方法语法:

    str.rfind(str, beg=0 end=len(string))
    • str -- 查找的字符串
    • beg -- 开始查找的位置,默认为0
    • end -- 结束查找位置,默认为字符串的长度。

    返回字符串最后一次出现的位置,如果没有匹配项则返回-1。

    def rfind(s,target_str,beg=None,end=None):
        if beg ==None:
            beg =0
        if end ==None:
            end =len(s)-1
        target_str_length =len(target_str)
        for i in range(len(s)-1,-1,-1):
            if i>=beg and i<=end:
                if (s[i:i+target_str_length]==target_str) :
                    return i
        return -1
    print(rfind("abcdjabw","abw"))
    def rfind_self_design(s,s_searched):
        if not isinstance(s,str) or not isinstance(s_searched,str):
            return 'input error'
        elif len(s_searched) > len(s):
            return -1
        elif len(s_searched) == len(s):
            if s_searched == s:
                return 0#原字符串和查找字符串长度相等的话直接返回坐标位置0
        else:
            for i in range(len(s)-len(s_searched),-1,-1):#倒叙按坐标取
                if s[i:i+len(s_searched)] == s_searched:
                    return i
            else:
                return -1
                
    print(rfind_self_design("ab cdjabe","e"))

    C:Usersdell>py -3 C:UsersdellDesktop练习5505.py
    5

    Python replace() 方法把字符串中的 old(旧字符串) 替换成 new(新字符串),如果指定第三个参数max,则替换不超过 max 次。

    replace()方法语法:

    str.replace(old, new[, max])
    • old -- 将被替换的子字符串。
    • new -- 新字符串,用于替换old子字符串。
    • max -- 可选字符串, 替换不超过 max 次

    返回字符串中的 old(旧字符串) 替换成 new(新字符串)后生成的新字符串,如果指定第三个参数max,则替换不超过 max 次。

    #算法:先找出old在s中出现的索引存到列表中,遍历列表,判断替换次数和第几次替换,注意第n次替换后索引位置的变化,最后再转回str

    def replace(s,old,new,times=None):
        old_length =len(old)
        old_index_list =[]
        s_list =list(s)
        old_sub_new_length =len(old) - len(new)
        
        #n为第几次替换
        n =1
        #如果不传times,替换次数则为原字符串的个数
        if times ==None:
            times =s.count(old)
        #找出原字符串中需要替换的子自创的索引存入一个列表
        for i in range(len(s)):
            if s[i:i+old_length] ==old:
                old_index_list.append(i)
        print(old_index_list)
    
        #遍历索引列表
        for index in old_index_list:
            if times >=1:
                if n ==1:
                    #如果是第一次替换,替换列表对应的索引位置的子字符串
                    s_list[index:index + old_length] =new
                    n +=1
                else:
                    print("n",n)
                    #如果不是第一次替换,每次替换后index应该更新为index-长度查*(n-1)
                    index =index -old_sub_new_length *(n-1)
                    s_list[index:index + old_length] =new
                    n +=1
                #每次循环后times要减一
                times -=1
    
        return "".join(s_list)
    
    print(replace("ab1ab2ab3ab4", "ab", "xyz"))
    print(replace("ab1ab2ab3ab4", "ab", "xyz",2))

    C:Usersdell>py -3 C:UsersdellDesktop练习5505.py
    [0, 3, 6, 9]
    n 2
    n 3
    n 4
    xyz1xyz2xyz3xyz4
    [0, 3, 6, 9]
    n 2
    xyz1xyz2ab3ab4

  • 相关阅读:
    junit4的初级用法
    junit3和junit4的区别总结
    工作一年多了,我的技术博客终于开通了
    VC++ 运行库官方安装包
    文本编辑器通用快捷键
    gcc命令介绍
    MinGW安装与配置
    windows常见快捷键
    Notepad++配置C/C++
    Notepad++快捷键
  • 原文地址:https://www.cnblogs.com/wenm1128/p/10816198.html
Copyright © 2011-2022 走看看