17
submitted 6 months ago by kionite231@lemmy.ca to c/rust@programming.dev

Hello,

As I said in the previous post that I have started learning Rust and made a simple fibonacci series generator. Today I made a palindrome string checker. it's very basic. I haven't used Enum or Struct in the code since I don't think it's necessary in this simple code.

here is the code:

use std::io;

fn main() {
    let mut input = String::new();
    let stdin = io::stdin();
    stdin.read_line(&mut input).unwrap(); // we want to exit in case it couldn't read from stdin

    input = input.replace("\n", ""); // Removing newline

    let mut is_palindrome: bool = true;
    for i in 0..input.len()/2 {
        let first_char: &str = &input[i..i+1];
        let last_char: &str = &input[input.len()-i-1..input.len()-i];
        if first_char != "\n" {
            if first_char != last_char {
                is_palindrome = false;
            }
        }
    }

    println!("palindrome: {}", is_palindrome);
}
you are viewing a single comment's thread
view the rest of the comments
[-] Flipper@feddit.org 25 points 6 months ago

There is a much nicer way of checking.

Rust iterators are really powerful. Try using them instead of loops, whenever you can.

Tap for solution

let is_palindrome = input.chars().eq(input.chars().rev());

As you can see, the intent is much clearer instead of indexing into the loops. Technically this does however twice as many comparisons. They can be avoided with take and half the size of the iterator.

[-] FizzyOrange@programming.dev 8 points 6 months ago

You only need to check half of the string, so I think a technically optimal solution would have some take_while and maybe char_indices in there...

[-] Flipper@feddit.org 8 points 6 months ago

That's exactly what I Hinted at in my post, though I would use take(input.size()/2). However I wouldn't be surprised if the compiler could short circuit it, but I haven't checked.

[-] FizzyOrange@programming.dev 9 points 6 months ago

Oh yeah I can't read ๐Ÿ˜„

I would be extremely surprised if any compiler was smart enough to short circuit that.

I would be a little less surprised if checking the whole string was actually faster anyway though... but I would still bet against it.

load more comments (3 replies)
this post was submitted on 23 Dec 2024
17 points (90.5% liked)

Rust

7149 readers
16 users here now

Welcome to the Rust community! This is a place to discuss about the Rust programming language.

Wormhole

!performance@programming.dev

Credits

  • The icon is a modified version of the official rust logo (changing the colors to a gradient and black background)

founded 2 years ago
MODERATORS