Ржавчина неправильно принимает ввод с помощью read_line

#algorithm #rust

Вопрос:

В настоящее время я выполняю практическую задачу codeforces, в которой мой код должен проверить, можно ли сделать строку не палиндромом, добавив к ней букву «а» в любом месте, возвращая » да «и правильную строку, если это так, и «нет», если это не так.

Мой код работает нормально, если у меня есть только 2 строки ввода (с количеством регистров и строкой):

 1
a
(returns no)
 

Но если у меня есть больше, это по какой-то причине начинает не работать:

 2
a
a
(returns yes for first "a", and no for second)
 

Вот мой код:

 use std::io;

fn main() {
    let mut input = String::new();
    io::stdin().read_line(amp;mut input).expect("");
    let num = input.trim().parse::<i32>().unwrap();

    for _ in 0..num {
        let mut word = String::new();
        io::stdin().read_line(amp;mut word).unwrap();

        for c in 0..word.len() {
            let mut wordtemp = word.clone();
            wordtemp.insert(c, 'a');
            if wordtemp != wordtemp.chars().rev().collect::<String>() {
                println!("YES");
                print!("{}", wordtemp);
                break;
            } else if c == word.len()-1 {
                println!("NO");
            }
        }
    }
}
 

Я застрял на некоторое время и понятия не имею, из-за чего это не работает, поэтому буду очень признателен за любую помощь!

Ответ №1:

В конце концов я решил свою проблему! Я публикую это здесь и редактирую свой вопрос на случай, если у других людей возникнет такая же проблема в будущем. Я принял ввод с помощью read_line , который включает пробелы. Чтобы удалить пробелы, вы должны использовать .trim() .

 let mut word = String::new();
        io::stdin().read_line(amp;mut word).unwrap();
        word = word.trim().to_string();