R语言中字符串比较求助:如何对比n与reversed_split?
解决R中字符串对比(回文判断)的问题
嘿,我看了你的代码,发现核心问题在于字符串元素比较的逻辑上,咱们来一步步修正它:
你的代码想判断输入字符串是不是回文字符串(正读反读一致),但当前的string == reversed_split会生成一个元素级的逻辑向量(每个位置的字符是否相等),而if语句需要的是一个单一的布尔值来做判断,所以直接这么写会不符合预期。
修正方案1:基于字符向量的全相等判断
# 读取标准输入的字符串 n <- readLines(file("stdin")) # 将字符串分割为单个字符的向量(直接提取列表元素,替代unlist) string <- strsplit(n, "")[[1]] # 反转字符向量(用rev()更直观,替代索引反转) reversed_split <- rev(string) # 检查所有位置的字符是否都相等,用all()把逻辑向量转为单一布尔值 if (all(string == reversed_split)) { print("Indeed") } else { print("Not At All") }
关键改进点:
strsplit(n, "")[[1]]:strsplit返回的是列表结构,用[[1]]直接提取第一个(也是唯一一个)元素,比unlist更精准,避免多输入场景下的意外合并。rev(string):R内置的向量反转函数,比手动写string[nchar(n):1]更清晰可靠,适配任意长度的字符串。all(string == reversed_split):将元素级的比较结果转为单一判断——只有所有字符都对应相等时,才返回TRUE,满足if语句的要求。
修正方案2:直接对比原字符串与反转后的字符串
如果你觉得字符向量操作麻烦,也可以把反转后的字符重新拼接成字符串,直接和原字符串对比:
n <- readLines(file("stdin")) # 分割字符→反转→重新拼接成字符串 reversed_n <- paste(rev(strsplit(n, "")[[1]]), collapse = "") # 直接对比两个字符串 if (n == reversed_n) { print("Indeed") } else { print("Not At All") }
这个写法更直观,和日常判断回文的逻辑完全一致:把原字符串反转后,看是不是和原字符串一模一样。
内容的提问来源于stack exchange,提问作者Arpit Agarwal
相关产品推荐
相关产品推荐

