2

该程序有效,但是,我仍然得到一个逻辑错误:最后一个字母没有运行。例如,当我输入 aaaabbbbccccdddd 时,我得到的输出是 a4b4c4 但没有 d4。

fun main () {

    val strUser = readLine()!!.toLowerCase()
    val iLength = strUser!!.length
    var iMatch : Int = 0
    var chrMatch : Char = strUser[0]

    for (i in 0..iLength) {

        if (strUser[i] == chrMatch) {

            iMatch += 1
        }else {
            print("$chrMatch$iMatch")
            chrMatch = strUser[i]
            iMatch = 1

        }


    }


}
4

4 回答 4

2

有很多解决方案,但最好的是RegExp

fun encode(input: String): String =
    input.replace(Regex("(.)\\1*")) {
        String.format("%d%s", it.value.length, it.groupValues[1])
    }

演示

测试结果

println(encode("aaaabbbbccccdddd")) // 4a4b4c4d
于 2021-05-04T22:37:11.930 回答
0

有趣的主要(){

val strUser = readLine()!!.toLowerCase()
var iMatch : Int = 0
var chrMatch : Char = strUser[0]

for (char in strUser+1) {

    if (char == chrMatch) {

        iMatch += 1
    }else {
        print("$chrMatch$iMatch")
        chrMatch = char
        iMatch = 1

    }


}

}

于 2020-05-22T14:43:02.630 回答
0

strUser包含按索引从0到的字符,iLength - 1因此您必须编写for (i in 0 until iLength)而不是for (i in 0..iLength)

但是 Tenfour04 是完全正确的,您可以在strUser没有索引的情况下进行迭代:

fun main() {
    val strUser = readLine()!!.toLowerCase()
    var iMatch: Int = 0
    var chrMatch: Char = strUser[0]

    for (char in strUser) {
        if (char == chrMatch) {
            iMatch += 1
        } else {
            print("$chrMatch$iMatch")
            chrMatch = char
            iMatch = 1
        }
    }
}
于 2020-05-21T18:34:49.150 回答
0
fun runLengthEncoding(inputString: String): String {
        val n=inputString.length
        var i : Int =0
        var result : String =""
        while(i<n){
            var count =1
            while(i<n-1 && inputString[i] == inputString[i+1]){
                count ++
                i++
            }

            result=result.toString()+count.toString()+inputString[i].toString()
            i++
        }
        return result
    }
于 2021-08-29T04:59:26.223 回答