You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言实现凯撒密码(Caesar Cipher)时空格无法正常转换问题

R实现凯撒密码的空格处理问题修复

问题现象

当前R编写的凯撒密码实现,仅能对不含空格的纯字母字符串完成正常移位转换,遇到带空格的输入会返回错误结果:

  • 输入"AB"时可正常完成1-26位全移位量的转换
  • 输入"A B"(A与B之间包含2个半角空格)时无法输出正确结果

原有问题代码如下:

Caesar = function(input){

answer = ""

solution = NULL

Low = "abcdefghijklmnopqrstuvwxyz"

Up = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

Lower = strsplit(Low,"")

Lower = Lower[[1]]

Upper = strsplit(Up, "")

Upper = Upper[[1]]

cutI = strsplit(input,"")

cutI = unlist(cutI)

df_Result = data.frame(n.Kan = 1:26)



for(n in 1:26){

answer = ""

for (i in cutI){

if (i %in% ""){

answer = paste0(collapse = "")

} else if (i %in% Lower){

ind = which(Lower == i)

indN = (as.numeric(ind)+n)%%26

if(indN %% 26==0){

indN = 26

}

answer = paste0(c(answer, Lower[indN]),collapse="")

} else{

ind = which(Upper == i)

indN = (as.numeric(ind)+n)%%26

if(indN%%26==0){

indN = 26

}

answer = paste0(c(answer, Upper[indN]), collapse = "")

}

answer=paste0(answer, collapse="")

}

solution = c(solution,answer)

}

df_Result = cbind(df_Result , "Result" = solution)

return(df_Result)

}

错误原因

空格处理的分支存在两处逻辑错误:

  1. 匹配条件写错:代码里判断的是空字符串"",但实际输入里的空格是带半角空格的" ",根本进不到空格处理分支
  2. 分支逻辑错误:就算匹配到对应字符,代码里执行answer = paste0(collapse = "")会直接清空之前已经拼接好的转换结果,也不会把空格保留到输出字符串里

修复后代码

只需要修正空格判断的条件和对应拼接逻辑,顺带删掉循环里冗余的重复拼接代码即可,修复后的完整代码:

Caesar = function(input){
  answer = ""
  solution = NULL
  Low = "abcdefghijklmnopqrstuvwxyz"
  Up = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  Lower = strsplit(Low,"")[[1]]
  Upper = strsplit(Up, "")[[1]]
  cutI = unlist(strsplit(input,""))
  df_Result = data.frame(n.Kan = 1:26)

  for(n in 1:26){
    answer = ""
    for (i in cutI){
      # 修正空格匹配条件和拼接逻辑
      if (i == " "){
        answer = paste0(c(answer, " "), collapse = "")
      } else if (i %in% Lower){
        ind = which(Lower == i)
        indN = (as.numeric(ind)+n)%%26
        if(indN %% 26==0){
          indN = 26
        }
        answer = paste0(c(answer, Lower[indN]),collapse="")
      } else{
        ind = which(Upper == i)
        indN = (as.numeric(ind)+n)%%26
        if(indN%%26==0){
          indN = 26
        }
        answer = paste0(c(answer, Upper[indN]), collapse = "")
      }
    }
    solution = c(solution,answer)
  }
  df_Result = cbind(df_Result , "Result" = solution)
  return(df_Result)
}

修复后测试输入"A B",移位量为1时返回结果为"B C",空格位置完全保留,大小写字母移位逻辑不受影响。


内容的提问来源于stack exchange,提问作者HHOHOI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 01:06:26