Bird
Raised Fist0
DSA Rustprogramming~5 mins

How Strings Work Differently Across Languages in DSA Rust - Revision Summary

Choose your learning style10 modes available
Recall & Review
beginner
What is the main difference between String and &str in Rust?

String is a growable, heap-allocated string type. &str is a string slice, a view into a string, usually immutable and fixed-size.

Click to reveal answer
intermediate
Why are Rust strings UTF-8 encoded instead of ASCII or UTF-16?

UTF-8 is compact for ASCII characters and supports all Unicode characters. It balances memory use and compatibility well.

Click to reveal answer
intermediate
How does Rust ensure safety when working with strings compared to languages like C?

Rust enforces memory safety with ownership and borrowing rules, preventing invalid memory access common in C string handling.

Click to reveal answer
advanced
What happens if you try to index a Rust String directly by position?

Rust does not allow direct indexing by position because UTF-8 characters can be multiple bytes, so indexing could break character boundaries.

Click to reveal answer
intermediate
How do strings in Rust differ from strings in Python or JavaScript?

Rust strings are UTF-8 encoded and mutable with String, while Python and JavaScript strings are immutable sequences of Unicode characters.

Click to reveal answer
Which Rust type represents a growable, heap-allocated string?
Achar
B&str
CVec<u8>
DString
Why can't you index a Rust String directly by number?
ABecause Rust strings are UTF-8 and characters can be multiple bytes
BBecause Rust strings are immutable
CBecause Rust strings are ASCII only
DBecause Rust strings are stored on the stack
What does &str represent in Rust?
AA mutable string buffer
BA character
CA string slice, a view into a string
DA byte array
How does Rust ensure memory safety with strings compared to C?
ARust uses garbage collection
BOwnership and borrowing rules prevent invalid access
CRust strings are immutable
DRust strings are stored only on the stack
Which encoding do Rust strings use?
AUTF-8
BASCII
CUTF-16
DISO-8859-1
Explain the difference between String and &str in Rust and why this distinction matters.
Think about ownership and mutability.
You got /4 concepts.
    Describe why Rust does not allow direct indexing of strings by position and how this relates to UTF-8 encoding.
    Consider how characters are stored in memory.
    You got /3 concepts.

      Practice

      (1/5)
      1. In Rust, which of the following best describes how String differs from string types in some other languages like Python or JavaScript?
      easy
      A. String in Rust is immutable and fixed-length like Python strings.
      B. String in Rust is a growable, heap-allocated UTF-8 encoded string.
      C. String in Rust stores characters as UTF-16 code units internally.
      D. String in Rust is a simple alias for a byte array without encoding.

      Solution

      1. Step 1: Understand Rust's String type

        Rust's String is designed to be growable and stored on the heap, unlike fixed-length strings in some languages.
      2. Step 2: Compare with other languages

        Languages like Python have immutable strings, and JavaScript strings are UTF-16 encoded internally, but Rust uses UTF-8 encoding for String.
      3. Final Answer:

        String in Rust is a growable, heap-allocated UTF-8 encoded string. -> Option B
      4. Quick Check:

        Rust String = growable UTF-8 heap string [OK]
      Hint: Remember Rust strings are UTF-8 and growable, unlike fixed immutable strings [OK]
      Common Mistakes:
      • Thinking Rust strings are immutable like Python strings
      • Assuming Rust strings use UTF-16 encoding
      • Confusing String with byte arrays without encoding
      2. Which of the following is the correct way to create a mutable String in Rust?
      easy
      A. let mut s = String::from("hello");
      B. let s = "hello";
      C. let s = String::new("hello");
      D. let s = "hello".to_string();

      Solution

      1. Step 1: Identify mutable string creation syntax

        In Rust, to create a mutable String, you declare it with mut and use String::from or to_string().
      2. Step 2: Check each option

        let s = "hello"; creates an immutable string slice (&str), not a String. let mut s = String::from("hello"); correctly creates a mutable String. let s = String::new("hello"); is invalid syntax. let s = "hello".to_string(); creates a String but lacks mut, making the binding immutable.
      3. Final Answer:

        let mut s = String::from("hello"); -> Option A
      4. Quick Check:

        Mutable String = let mut s = String::from(...) [OK]
      Hint: Use let mut s = String::from(...) for mutable strings [OK]
      Common Mistakes:
      • Using string literals without mut for mutability
      • Trying to use String::new("hello") which is invalid
      • Confusing string slices with String type
      3. What will be the output of the following Rust code?
      let s = String::from("hello");
      let h = &s[0..1];
      println!("{}", h);
      medium
      A. Runtime panic due to invalid UTF-8 slicing
      B. he
      C. h
      D. hello

      Solution

      1. Step 1: Understand Rust string slicing rules

        Rust strings are UTF-8 encoded, so slicing must be on valid UTF-8 boundaries. Index 0..1 slices the first byte only.
      2. Step 2: Check if slicing 0..1 is valid UTF-8

        For "hello", ASCII characters are 1 byte each, so 0..1 is valid and equals "h".
      3. Step 3: Confirm output

        println!("{}", h) where h = &s[0..1] = "h" outputs h.
      4. Final Answer:

        h -> Option C
      5. Quick Check:

        Slice 0..1 of "hello" = "h" [OK]
      Hint: Remember ASCII chars are 1 byte, so 0..1 slice is valid [OK]
      Common Mistakes:
      • Assuming slicing 0..1 causes panic always
      • Confusing byte index with character index
      • Expecting multiple characters from 0..1 slice
      4. Identify the error in this Rust code snippet:
      let s = String::from("Здравствуйте");
      let slice = &s[0..1];
      println!("{}", slice);
      medium
      A. No error, prints first character
      B. Prints garbage characters
      C. Compile-time error: invalid slice syntax
      D. Runtime panic: slicing not on UTF-8 boundary

      Solution

      1. Step 1: Analyze the string content and slicing

        The string "Здравствуйте" contains Cyrillic characters, each encoded in multiple bytes in UTF-8.
      2. Step 2: Check slicing 0..1 validity

        Slicing 0..1 takes only the first byte, which is not a valid UTF-8 character boundary for Cyrillic letters, causing a runtime panic.
      3. Final Answer:

        Runtime panic: slicing not on UTF-8 boundary -> Option D
      4. Quick Check:

        UTF-8 multi-byte chars require valid slice boundaries [OK]
      Hint: Multi-byte UTF-8 chars cannot be sliced by single bytes [OK]
      Common Mistakes:
      • Assuming slicing always works like ASCII
      • Ignoring UTF-8 multi-byte character boundaries
      • Expecting compile-time error instead of runtime panic
      5. Given a Rust String containing Unicode text, which approach correctly iterates over each Unicode character safely?
      hard
      A. Using for c in s.chars() to iterate over Unicode scalar values.
      B. Using for i in 0..s.len() and slicing &s[i..i+1] for each byte.
      C. Using for c in s.bytes() to get each character.
      D. Using for c in s.split(' ') to get characters.

      Solution

      1. Step 1: Understand Rust string iteration methods

        s.chars() iterates over Unicode scalar values (characters) safely, respecting UTF-8 boundaries.
      2. Step 2: Evaluate other options

        Using for i in 0..s.len() and slicing &s[i..i+1] slices bytes which can cause invalid UTF-8. for c in s.bytes() iterates bytes, not characters. for c in s.split(' ') splits by spaces, not characters.
      3. Final Answer:

        Using for c in s.chars() to iterate over Unicode scalar values. -> Option A
      4. Quick Check:

        Use s.chars() for safe Unicode iteration [OK]
      Hint: Use s.chars() to safely iterate Unicode characters [OK]
      Common Mistakes:
      • Iterating bytes instead of characters
      • Slicing string by byte indices unsafely
      • Using split which divides by delimiter, not characters
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard