gpt4 book ai didi

string - 如何制作比较字符串的函数?

转载 作者:搜寻专家 更新时间:2023-11-01 05:54:03 25 4
gpt4 key购买 nike

我想制作一个比较字符串的函数。我不想使用相等运算符 (==),我希望它只适用于 Swift 语言。

首先,我创建了一个接受 2 个字符串并返回 bool 类型的函数。然后我用 for in 语法循环这些字符串。并且要比较这些字符,如果字符串具有相等的值,则返回 true,否则返回 false。有没有更好的办法?

func isEqual(str1:String, str2:String) -> Bool {
var result = false

for char in str1 {

}
for char2 in str2 {

}
//Compare characters.
return result
}

最佳答案

== 在 Swift 中可以很好地处理字符串。出于教育目的(正如我从您的评论中得出的结论“因为我正在练习......”)您可以将其实现为:

func myStringCompare(str1 : String, str2 : String) -> Bool {

if count(str1) != count(str2) {
return false
}
for (c1, c2) in zip(str1, str2) {
if c1 != c2 {
return false
}
}
return true
}

zip(str1, str2) 返回给定的对序列序列,这是枚举字符串的便捷方式“并行”。

一旦你理解了它的工作原理,你就可以缩短它,例如:

func myStringCompare(str1 : String, str2 : String) -> Bool {

return count(str1) == count(str2) && !contains(zip(str1, str2), { $0 != $1 })
}

比较字符串长度是必要的,因为 zip() 序列一旦其中一个字符串用完就终止。看一下@drewag 对 In Swift I would like to "join" two sequences in to a sequence of tuples 的回答用于替代 Zip2WithNilPadding 序列。

如果您不想使用内置的 zip() 函数(再次为教育/自学目的!)那么你可以使用这个事实字符串是序列,并使用并行枚举它们序列生成器。这不仅适用于字符串,而且适用于对于任意序列,只要底层元素可以进行相等性测试,所以让我们将其设为通用函数:

func mySequenceCompare<S : SequenceType where S.Generator.Element : Equatable>(lseq : S, rseq : S) -> Bool {

var lgen = lseq.generate()
var rgen = rseq.generate()

// First elements (or `nil`):
var lnext = lgen.next()
var rnext = rgen.next()
while let lelem = lnext, relem = rnext {
if lelem != relem {
return false
}
// Next elements (or `nil`):
lnext = lgen.next()
rnext = rgen.next()
}

// Are both sequences exhausted?
return lnext == nil && rnext == nil
}

测试:

mySequenceCompare("xa", "xb")  // false
mySequenceCompare("xa", "xa") // true
mySequenceCompare("a", "aa") // false
mySequenceCompare("aa", "a") // false

关于string - 如何制作比较字符串的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30594441/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com