题目

Strip Comments

描述

Complete the solution so that it strips all text that follows any of a set of comment markers passed in. Any whitespace at the end of the line should also be stripped out.

完成该解决方案,以便它剥离传入的任何一组注释标记后面的所有文本。行末尾的任何空格也应该去掉。

例子

Given an input string of:

给定以下内容的输入字符串:

apples, pears # and bananas
grapes
bananas !apples

The output expected would be:
预期产出将是:

apples, pears
grapes
bananas

The code would be called like so:

代码的调用方式如下:

result = solution("apples, pears # and bananas\ngrapes\nbananas !apples", ["#", "!"])
# result should == "apples, pears\ngrapes\nbananas"

思路

这题看描述非常的简单,甚至看完例子都还有点懵,但是其实非常的简单。

首先明白\n代表的是换行,通过上面的例子也可以看出来

然后就是明白如何进行删除,根据传入的markers得到删除的标志,一直删除包括标志后面的字符到\n换行

这里还需要注意空格的处理,如果标志的前面是空格,删除后会变成行尾的空格,题意是不需要的,这里是要删除的处理方法,单下一个是标志的时候,并且前面是空格的时候,跳过。

# 空格处理
if i < (len(string) - 1) and string[i + 1] in markers:
    if string[i] == " ":
        continue

本题的关键就是在于标志,其实非常的简单,我们只要遍历字符串,当遍历到的字符是标志的时候,我们做好标记,后面的字符都删掉,当碰到\n换行的时候,就取消这个标记,所有的字符串操作都要在标记取消的时候

# 确定标志的起始位置
if markers_flag == 0 and string[i] in markers:
    markers_flag = 1
# 确定标志的终止位置
elif (markers_flag == 1) and (string[i] not in markers) and (string[i] == "\n"):
    markers_flag = 0

if markers_flag == 0:

全部代码

def solution(string,markers):
    #your code here
    markers_flag = 0
    result = ''

    # 直接遍历string
    for i in range(len(string)):
        # 确定标志的起始位置
        if markers_flag == 0 and string[i] in markers:
            markers_flag = 1
        # 确定标志的终止位置
        elif (markers_flag == 1) and (string[i] not in markers) and (string[i] == "\n"):
            markers_flag = 0

        if markers_flag == 0:
            # 空格处理
            if i < (len(string) - 1) and string[i + 1] in markers:
                if string[i] == " ":
                    continue
            result += string[i]

    return result[:]