为啥我的每个单词反转代码不反转某些单词?

Posted

技术标签:

【中文标题】为啥我的每个单词反转代码不反转某些单词?【英文标题】:Why my each word reversing code is not reversing some words?为什么我的每个单词反转代码不反转某些单词? 【发布时间】:2021-04-08 06:49:42 【问题描述】:

我想做什么

我正在尝试制作一个反转每个单词的程序,但不反转标签中的单词。 输入输出示例:

输入:

Thank you stack overflow

输出:

knahT uoy kcats wolfrevo

如果单词在标签中,不要颠倒。这样:

输入:

<tag>something

输出:

<tag>gnihtemos

我的代码

我尝试使用堆栈算法解决这个问题。

s = input()
def stackprint(st):
    while st != []:
        print(st.pop(), end="")
stack = []
tag = False
for ch in s:
    if ch == '<':
        stackprint(stack)
        tag = True
        print(ch, end="")
    elif ch == '>':
        tag = False
        print(ch, end="")
    elif tag:
        print(ch, end="")
    else:
        if ch == ' ':
            stackprint(stack)
            print(ch, end="")
        else:
            stack.append(ch)
print("".join(stack))

问题

但是,如果只有一个单词或没有标签,我的代码将无法正常工作。没有标签时,最后一个字不倒置,只有一个字时,不倒置。

现在的输出:

第一

输入时:

<tag>something

输出:

<tag>something 

^ 我需要一些东西来扭转。

第二

输入:

Thank you stack overflow

输出:

knahT uoy kcats overflow

^ 我需要反转溢出。

重要

我需要 里面的任何东西都不应该颠倒。 如果单词在标签中,则不应颠倒 喜欢输入:

<tag>word<tag>

输出:

<tag>drow<tag>

标签和单词之间没有空格。

Thank you <tag>stack overflow
knahT uoy <tag>kcats wolfrevo

【问题讨论】:

不是在最后加入堆栈,而是调用stackprint 方法。它将确保在脚本退出之前清空堆栈。 现在似乎是学习调试的好时机。在纸上确定您希望代码如何流动以及您希望变量在代码中的哪个位置具有哪些值。这与您实际获得的值相比如何? @NotThatGuy 你什么意思? ”和下一个单词之间是否有空格?这个“谢谢堆栈溢出”的输出是什么? 您是否在编辑后再次测试了您的代码?如果没有,您应该这样做,并且通常不建议对可能解决您遇到的问题并因此使问题无效的问题进行编辑(而是将这些信息留作答案,或者如果您认为它只是删除问题是不太可能对其他人有帮助)。另外,您可能指的是stackprint(stack),而不是stackprint(st) 【参考方案1】:

正如我在评论部分提到的,不是用 join 方法打印堆栈,而是调用 stackprint 方法来确保堆栈被清空会给你想要的结果。

s = input()
def stackprint(st):
    while st != []:
        print(st.pop(), end="")
stack = []
tag = False
for ch in s:
    if ch == '<':
        stackprint(stack)
        tag = True
        print(ch, end="")
    elif ch == '>':
        tag = False
        print(ch, end="")
    elif tag:
        print(ch, end="")
    else:
        if ch == ' ':
            stackprint(stack)
            print(ch, end="")
        else:
            stack.append(ch)
stackprint(stack)

【讨论】:

【参考方案2】:

这似乎适用于您提供的示例:

def revSetence(sentence):
    sentence = sentence + " ";
    flag = False
    final_sentence = ""
    word = ""
    for letter in sentence:
        if letter == "<":
            flag = True
        if letter == ">":
            flag = False
        if letter.isalpha():
            if flag:
                final_sentence = final_sentence + letter
            else:
                word = word + letter
        else:
            if len(word) > 0:
                final_sentence = final_sentence + word[::-1] 
            final_sentence = final_sentence + letter
            word =""
    return final_sentence

【讨论】:

以上是关于为啥我的每个单词反转代码不反转某些单词?的主要内容,如果未能解决你的问题,请参考以下文章

问:C ++ - 使用类反转字符串(句子和单词)

C语言实现字符串单词反转

C语言实现来实现字符串反转,只有单词顺序反转,组成单词的字母不反转

为啥有些单词没有被检查或包含在反向单词字符串中?

反转句子中每个单词中的字符 - Thinbug

557. 反转字符串中的单词 III