[英]Kotlin: Run length encoding
The program works, however, I still get a logical error: the final letter doesn't run through.该程序有效,但是,我仍然得到一个逻辑错误:最后一个字母没有运行。 For example, when I enter aaaabbbbccccdddd the output I get is a4b4c4 but there is no d4.例如,当我输入 aaaabbbbccccdddd 时,我得到的 output 是 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
}
}
}
fun main () {有趣的主要(){
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
}
}
} }
strUser
contains chars by indexes from 0
to iLength - 1
so you have to write for (i in 0 until iLength)
instead of for (i in 0..iLength)
strUser
包含从0
到iLength - 1
的索引的字符,所以你必须写for (i in 0 until iLength)
而不是for (i in 0..iLength)
But Tenfour04 is completely right, you can just iterate strUser
without indexes:但是 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
}
}
}
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
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.