使用堆栈反转字符串的 Swift 程序
堆栈是一种遵循 LIFO(后进先出)原则的数据结构。它用于存储和管理数据,其中最近添加的元素将最先从堆栈中移除。堆栈支持以下操作 -
推送 - 它用于将元素添加到堆栈中。因此,在 Swift 中,我们通过 append() 方法实现推送操作。
语法
func push(_ items: T) {
item.append(items)
}
此处,append() 函数将一个新元素推送到元素堆栈中。
弹出 - 它用于从堆栈中移除元素。因此,在 Swift 中,我们通过 popLast() 方法实现弹出操作。
Syntax
func pop() -> T? {
return item.popLast()
}
此处,popLast() 函数从堆栈中移除最近添加的元素。
isEmpty − 它用于检查堆栈是否为空。因此,在 Swift 中,我们通过使用 isEmpty 属性来实现此操作。
Syntax
func isEmpty() -> Bool {
return item.isEmpty
}
此处,isEmpty 属性用于在堆栈为空时返回 true。否则,如果堆栈不为空,则返回 false。
在 Swift 中,为了反转字符串,我们将使用基于数组和基于结构的堆栈实现。这是实现堆栈最常见且最直接的方法。
示例
Input: String = "Ram got first place" Output: "ecalp tsrif tog maR"
这里,我们使用堆栈反转输入字符串。
算法
步骤 1 - 创建一个接受输入字符串的函数。
步骤 2 - 现在,此函数首先使用数组创建一个堆栈。
步骤 3 - 将原始字符串中的所有字符推送到堆栈中。
步骤 4 - 创建一个空字符串来存储结果。
步骤 5 - 现在开始从堆栈中弹出最近添加的字符,直到堆栈为 isEmpty,并将它们存储到新字符串中。
步骤 6 - 返回反转后的字符串。
步骤 7 - 创建一个字符串。
步骤 8 - 调用函数并将输入字符串作为参数传递。
步骤 9 - 显示输出。
示例 1
在下面的 Swift 程序中,我们将使用堆栈保留一个字符串。为此,我们创建一个接受输入字符串的函数。然后,它使用数组实现创建一个堆栈。然后,它使用 append() 方法将给定字符串的所有字符推送到堆栈中。
然后,它创建一个空字符串来存储反转后的字符串。然后,当堆栈不为空时,它使用 popLast() 函数从堆栈中弹出字符,并将它们附加到新的空字符串中。最后,此函数使用堆栈返回反转后的字符串。
import Foundation
import Glibc
func reverseStringUsingStack(str: String) -> String {
var myStack = [Character]()
for char in str {
myStack.append(char)
}
var reversedStr = ""
while !myStack.isEmpty {
reversedStr.append(myStack.popLast()!)
}
return reversedStr
}
let originalStr = "Learn String"
let resultantString = reverseStringUsingStack(str: originalStr)
print("原始字符串:", originalStr)
print("反转字符串:", resultantString)
输出
原始字符串:Learn String 反转字符串:gnirtS nraeL
示例 2
在下面的 Swift 程序中,我们将使用堆栈来保留一个字符串。因此,我们使用基于结构体的实现来实现堆栈。这里,我们定义了一个结构体,并包含 push、pop 和 isEmpty 方法。然后创建一个函数,在该函数中创建一个堆栈结构的实例,并将输入字符串的所有字符压入堆栈,然后以相反的顺序弹出它们,以创建一个反转的字符串。
import Foundation
import Glibc
// Implementing stack using structure
struct myStack<T> {
private var item = [T]()
mutating func push(_ items: T) {
item.append(items)
}
mutating func pop() -> T? {
return item.popLast()
}
func isEmpty() -> Bool {
return item.isEmpty
}
}
func reverseString(inputStr: String) -> String {
var stack = myStack<Character>()
for c in inputStr {
stack.push(c)
}
var resultantStr = ""
while !stack.isEmpty() {
if let c = stack.pop() {
resultantStr.append(c)
}
}
return resultantStr
}
let Str = "My cas color is green"
let reversedString = reverseString(inputStr: Str)
print("输入字符串为:\(Str)")
print("反转字符串为:\(reversedString)")
输出
输入字符串为:My cas color is green 反转字符串为:neerg si roloc sac yM
结论
以上就是如何使用 Stack 反转字符串。虽然 Swift 不支持任何内置的 Stack 数据结构,但我们仍然可以使用各种方式实现 Stack,例如链表、结构体、类、数组等。在所有方法中,实现 Stack 最简单、最直接的方法是使用数组。