如何交换字符串中的两个字母?

发布于 2024-10-18 04:42:05 字数 68 浏览 2 评论 0原文

我想改变字母的顺序。例如,有一个字符串“abc”,输出必须是“bac”。你能告诉我该怎么做吗?

先感谢您。

I want to switch the order of the letters. For example, there is a string "abc" and the output must be "bac". Can you please tell me how I can do it?

Thank you in advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

天煞孤星 2024-10-25 04:42:05

您可以使用 String 可以隐式转换为 IndexedSeq[Char] 的事实:

def switch(s: String) = (s take 2 reverse) + (s drop 2)

此函数也可以正确处理小于 2 个字符的字符串,只需尝试以下操作:

println(switch("abc")) // prints: bac
println(switch("ab")) // prints: ba
println(switch("a")) // prints: a
println(switch("")) // prints: 

You can use fact, that String can be converted to IndexedSeq[Char] implicitly:

def switch(s: String) = (s take 2 reverse) + (s drop 2)

This function also works correctly with strings, that smaller than 2 chars, just try this:

println(switch("abc")) // prints: bac
println(switch("ab")) // prints: ba
println(switch("a")) // prints: a
println(switch("")) // prints: 
柳絮泡泡 2024-10-25 04:42:05

您的问题不清楚您是否想要反转字符串的东西,或者是否想要交换字符串中的两个字符的东西。这个答案是针对后者的。

def swap(s : String, idx1 : Int, idx2 : Int) : String = {
  val cs = s.toCharArray
  val swp = cs(idx1)
  cs(idx1) = cs(idx2)
  cs(idx2) = swp
  new String(cs)
}

当然,您可以将其概括为任何可以被视为 IndexedSeq 的内容:

 def swap[A, Repr](repr : Repr, idx1 : Int, idx2 : Int)
     (implicit bf: CanBuildFrom[Repr, A, Repr], 
      ev : Repr <%< IndexedSeqLike[A, Repr]) : Repr = {
  val swp = repr(idx1)
  val n = repr.updated(idx1, repr(idx2))
  n.updated(idx2, swp)
}

Your question is not clear as to whether you want something which reverses a String, or whether you want something which swaps two characters in a String. This answer is for the latter

def swap(s : String, idx1 : Int, idx2 : Int) : String = {
  val cs = s.toCharArray
  val swp = cs(idx1)
  cs(idx1) = cs(idx2)
  cs(idx2) = swp
  new String(cs)
}

Of course you could generalize this into anything which can be viewed as an IndexedSeq:

 def swap[A, Repr](repr : Repr, idx1 : Int, idx2 : Int)
     (implicit bf: CanBuildFrom[Repr, A, Repr], 
      ev : Repr <%< IndexedSeqLike[A, Repr]) : Repr = {
  val swp = repr(idx1)
  val n = repr.updated(idx1, repr(idx2))
  n.updated(idx2, swp)
}
冰之心 2024-10-25 04:42:05

更实用的东西怎么样?

import collection.breakOut

def swap(s:String, x:Int, y:Int):String = s.zipWithIndex.collect{
  case (_,`x`) => s(y)
  case (_,`y`) => s(x)
  case (c,_) => c
}(breakOut)

How about something more functional?

import collection.breakOut

def swap(s:String, x:Int, y:Int):String = s.zipWithIndex.collect{
  case (_,`x`) => s(y)
  case (_,`y`) => s(x)
  case (c,_) => c
}(breakOut)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文