0

我从破解代码面试中练习面试问题。

问题是对于每个空格 (' ') 将其替换为 '%20'。对于字符串中的每个空格,字符串的末尾有 2 个额外的空格。

例如输入:(str = "b_g_f_ _ _ _" 下划线表示空格。更容易表示)

output: str2 = "b%20g%20f"

目前我的输出无法正常工作

input: "b c  "

output: "b%20c%20%20"

correct output: "b%20c"

代码:

def editstr(str):
    str2 = ""
    length = len(str)
    count = 0
    while 3*count < length:
        for char in str:
            if ord(char) < 257 and ord(char) >= 0 and ord(char) != 32:
                str2 = str2 + char
                count += 1
            else:
                if ord(char) == 32:
                    str2 = str2 + ("%20")
                    count += 3
    print str2
4

5 回答 5

4

也许我错过了一些东西,但只是这样做有什么问题:

>>> s = "b f g      "
>>> s.strip().replace(' ','%20')
'b%20f%20g'

重写语言中内置的行为并不会让你更聪明,恰恰相反。这样看:

  • 任何 Python 开发人员都会立即确切地知道这段代码的作用。
  • 这些功能都有很好的文档记录和测试。
  • 我用大约 1% 的时间编写和测试你的函数。
于 2013-09-30T18:34:57.687 回答
3

Python 字符串是不可变的。因此,如果您想在 Python 中实现此类字符串替换,则输入字符串中的额外空格将无济于事。如果你想在 Python 中解决问题,请以 Pythonic 的方式进行:

def editstr(s):
    n = s.count(' ')
    if n == 0: return s
    return s[:-2*n/3].replace(' ', '%20')

这将删除末尾添加的“额外”空格,并用于.replace进行实际的字符串替换。

于 2013-09-30T18:42:46.903 回答
3

这是作弊吗?

> import urllib
> urllib.quote("b g f     ")
'b%20g%20f%20%20%20%20%20'

感谢@SteveJessop,我终于明白了这个问题,我不确定示例中的正确输出是什么,这是我使用生成器的看法,也许它更有效:

input = "b g f    "
def generate_str(input):
    new, orig = [len(input)] * 2   
    for i, char in enumerate(input):
        if i == new: 
            break 
        if char == " ":
            new -= 2
            yield "%20"
        else:
            yield char

print ''.join(generate_str(input))
于 2013-09-30T18:38:11.370 回答
1

更多pythonic:

import urllib
urllib.quote(url.strip())

跟进上面的讨论:

urllib.quote(url[:-2]+(url[-2:].strip()))
于 2013-09-30T19:42:45.297 回答
0

在输入字符串的末尾,这些空格将不计入转换的一部分。根据 ASCII,空格 char ' ' 是数字 32,但 void char 是数字 0。这将帮助您通过在 char 数组末尾说出足够的空间来理解这个问题的含义。除此之外,这个面试问题指定你应该在适当的地方进行转换。所以尽量不要为此创建第二个字符串。

于 2013-09-30T18:38:09.667 回答