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",两者内容不相等,因此程序判定为非回文。
修复方案
- 清理输入字符串:用
trim()方法去除输入字符串首尾的空白字符(包括换行符、空格等),确保只保留输入的单词。 - 简化反转逻辑:Rust的
chars().rev().collect()可以直接完成字符串反转,无需手动循环。 - 直接比较原字符串和反转后的字符串:不需要切片操作,避免额外错误。
修复后的代码
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
相关产品推荐
相关产品推荐

