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

Rust回文程序异常:输入回文字符串却判定为非回文

Rust回文判定程序错误修复

问题描述

我用Rust写了一个回文判定程序,但输入回文字符串(比如amma)时,程序却判定它是非回文。以下是我的代码和运行输出:

原代码

use std::io;
fn main(){
    println!("enter a word to know if palindrome or not");
    let mut inp=String::new();
    io::stdin().read_line(&mut inp).expect("needed a string");
    let  arr:Vec<_>=inp.chars().collect();
    let mut new_st=String::new();
    for i in 0..arr.len(){
        new_st.push(arr[arr.len()-1-i]);
    }
    
    if inp.eq(&new_st[1..]) {
        println!("Palindrome");
    }
    else{
        println!("not a palindrome..");
    }
    println!("{}",&new_st[1..]);
}

原运行输出

enter a word to know if palindrome or not
amma
not a palindrome..
amma

问题原因

核心问题在于io::stdin().read_line(&mut inp)会把输入时按下的**换行符\n**也读取到inp字符串中。比如输入amma后回车,inp实际内容是"amma\n",而非单纯的"amma"。

反转后的new_st内容是"\namma",你用new_st[1..]截取得到"amma",但此时inp是"amma\n",两者内容不相等,因此程序判定为非回文。

修复方案

  1. 清理输入字符串:用trim()方法去除输入字符串首尾的空白字符(包括换行符、空格等),确保只保留输入的单词。
  2. 简化反转逻辑:Rust的chars().rev().collect()可以直接完成字符串反转,无需手动循环。
  3. 直接比较原字符串和反转后的字符串:不需要切片操作,避免额外错误。

修复后的代码

use std::io;

fn main() {
    println!("请输入一个单词,判断是否为回文:");
    let mut inp = String::new();
    io::stdin().read_line(&mut inp).expect("读取输入失败");
    
    // 去除首尾空白字符(包括换行符)
    let inp_trimmed = inp.trim().to_string();
    // 直接反转字符串
    let reversed: String = inp_trimmed.chars().rev().collect();
    
    if inp_trimmed.eq(&reversed) {
        println!("是回文");
    } else {
        println!("不是回文");
    }
    
    println!("原输入:{}", inp_trimmed);
    println!("反转后:{}", reversed);
}

修复后的运行输出

请输入一个单词,判断是否为回文:
amma
是回文
原输入:amma
反转后:amma

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 08:30:47