仓颉刷题录-字符串数字转换(一)


这是双子专栏Cangjie仓颉程序设计-个人总结
本专栏还在持续更新仓颉编程cangjie刷题录

背景

报名了一个仓颉的比赛,感觉条件要求挺低的,就想上。哈哈哈。但是学起来真是很糟心,没有资料,只有官方文档,官方文档写的也就那样。一天下来就刷了这么一道简单题。

题目:交换后字典序最小的字符串

题目链接

给你一个仅由数字组成的字符串 s,在最多交换一次 相邻 且具有相同 奇偶性 的数字后,返回可以得到的字典序最小的字符串。

如果两个数字都是奇数或都是偶数,则它们具有相同的奇偶性。例如,5 和 9、2 和 4 奇偶性相同,而 6 和 9 奇偶性不同。

class Solution {
    func getSmallestString(s: String): String {
        var arr = Array(s)	// Array<UInt8>
        var zero = "0"		// String
        for (i in 0..s.size-1) {
            var a = arr[i] - zero[0]	// UInt8
            var b = arr[i + 1] - zero[0]
            if (a > b && a % 2 == b % 2) {
                var t = arr[i]
                arr[i] = arr[i + 1]
                arr[i + 1] = t
                break
            }
        }
        var res = Array<Rune>(s.size) {i => Rune(0)}
        for (i in 0..s.size) {
            res[i] = Rune(arr[i])
        }
        return String(res)
    }
}

个人感受

这个语言六月份正式发布,属于是gpt都没学过的存在,网上资料也基本都是抄官方文档。所以写起来就究极蛋疼!
我就是想随便选一道题先试试水,谁知道遇到了cangjie的一系列大槽点:

  • cangjie默认字符为Unicode编码,而且String类型的单个元素取出来类型竟然是一个字节的整型UInt8!
  • 字符只支持转换为32字节的无符号整型UInt32。
  • 字符串不支持修改

本来Unicode我都懵了,这还咋玩字符和数字的转换,搜了一下发现值在一个字节内的简单字符Unicode值与ASCII值相同的,这让我松了一口气。
然而,上面三点一列我就试了一天怎么弄。妈的官方的String文档那么大篇幅就写了怎么赋值,可以用+拼接和能比字典序,我真是服了,连初始化都不写,我是凭借逻辑试了一下直接用String(Array)初始化。然后又是类型错误,这种方式只支持Array<Rune>类型.

总之,这道题就是各种乱七八糟的格式转换。总结如下:

  • 先拿到一个可修改的数组, arr = Array(s),类型为Array<UInt8>
  • 拿到字符’0’的Unicode值:构建字符串 zero=“0”,那么得到其Unicode值为 zero[0]
  • 拿到字符的数字值:arr[i] - zero[0]
  • 做处理
  • 拿到一个 Array<Rune>类型的数组 res
  • 把 arr里面的东西腾到 res里面
  • String(res)即可
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Rendy_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值