Bird
Raised Fist0
DSA C++programming

String Traversal and Character Access in DSA C++

Choose your learning style10 modes available
Mental Model
A string is a sequence of characters you can look at one by one from start to end.
Analogy: Like reading a sentence letter by letter to understand or find a specific letter.
S -> t -> r -> i -> n -> g -> \0
↑
Dry Run Walkthrough
Input: string: "cat"; goal: print each character on a new line
Goal: To visit each character in the string and print it separately
Step 1: Start at first character 'c'
c -> a -> t -> \0
↑
Why: We begin reading from the first character
Step 2: Print 'c' and move to next character 'a'
c -> a -> t -> \0
  ↑
Why: After processing 'c', move forward to continue traversal
Step 3: Print 'a' and move to next character 't'
c -> a -> t -> \0
    ↑
Why: Continue visiting each character in order
Step 4: Print 't' and move to null terminator '\0'
c -> a -> t -> \0
      ↑
Why: Reached last character, next is string end
Step 5: Stop traversal at '\0' (end of string)
c -> a -> t -> \0
        ↑
Why: Null terminator marks end, stop to avoid invalid access
Result:
c\na\nt\n
Annotated Code
DSA C++
#include <iostream>
#include <string>

void printChars(const std::string& str) {
    for (size_t i = 0; i < str.size(); ++i) {
        std::cout << str[i] << '\n'; // print current character
    }
}

int main() {
    std::string input = "cat";
    printChars(input);
    return 0;
}
for (size_t i = 0; i < str.size(); ++i) {
iterate over each character index from start to end
std::cout << str[i] << '\n';
access and print the character at current index
OutputSuccess
c a t
Complexity Analysis
Time: O(n) because we visit each of the n characters once
Space: O(1) because we only use a few variables regardless of string size
vs Alternative: Direct indexing is simpler and faster than using iterators or copying characters
Edge Cases
empty string ""
The loop does not run and nothing is printed
DSA C++
for (size_t i = 0; i < str.size(); ++i) {
string with one character "x"
Prints the single character and stops
DSA C++
for (size_t i = 0; i < str.size(); ++i) {
When to Use This Pattern
When you need to process or examine each letter in a word or sentence, use string traversal to access characters one by one.
Common Mistakes
Mistake: Accessing characters beyond string length causing out-of-bounds error
Fix: Always check that index is less than string size before accessing
Summary
It visits each character in a string one by one.
Use it when you want to read or process every letter in a word or sentence.
Remember strings are sequences you can access by position from start to end.

Practice

(1/5)
1. What does the expression str[i] do when str is a string in C++?
easy
A. Returns the length of the string
B. Accesses the character at index i in the string
C. Deletes the character at index i
D. Converts the string to uppercase

Solution

  1. Step 1: Understand string indexing in C++

    In C++, strings are like arrays of characters. Using str[i] accesses the character at position i.
  2. Step 2: Clarify what str[i] returns

    The expression returns the character stored at index i without modifying the string.
  3. Final Answer:

    Accesses the character at index i in the string -> Option B
  4. Quick Check:

    str[i] = character at i [OK]
Hint: Remember strings are arrays of chars; indexing gets a character [OK]
Common Mistakes:
  • Thinking it returns string length
  • Assuming it deletes characters
  • Confusing with string case conversion
2. Which of the following is the correct way to loop through each character of a string str in C++?
easy
A. for (int i = 0; i <= str.length(); i++)
B. for (int i = 1; i < str.length(); i++)
C. for (int i = 0; i < str.length(); i++)
D. for (int i = 1; i <= str.length(); i++)

Solution

  1. Step 1: Understand string length and indexing

    String indices start at 0 and go up to str.length() - 1. So loop must run while i < str.length().
  2. Step 2: Check loop conditions

    for (int i = 0; i < str.length(); i++) uses i < str.length() starting from 0, which correctly covers all characters without going out of bounds.
  3. Final Answer:

    for (int i = 0; i < str.length(); i++) -> Option C
  4. Quick Check:

    Loop from 0 to length-1 [OK]
Hint: Loop from 0 to less than length to avoid out-of-bounds [OK]
Common Mistakes:
  • Using <= causes out-of-bounds error
  • Starting loop at 1 misses first character
  • Confusing length with last index
3. What is the output of the following C++ code?
std::string s = "hello";
for (int i = 0; i < s.length(); i++) {
    if (s[i] == 'l') {
        std::cout << i << " ";
    }
}
medium
A. 0 1
B. 1 2
C. 3 4
D. 2 3

Solution

  1. Step 1: Identify characters and their indices

    The string "hello" has characters: h(0), e(1), l(2), l(3), o(4).
  2. Step 2: Check which indices have 'l'

    Characters at indices 2 and 3 are 'l', so those indices are printed.
  3. Final Answer:

    2 3 -> Option D
  4. Quick Check:

    Indices of 'l' = 2 3 [OK]
Hint: Check string indices carefully for matching characters [OK]
Common Mistakes:
  • Confusing character positions
  • Printing characters instead of indices
  • Off-by-one errors in indexing
4. Identify the error in this code snippet that tries to print all characters of a string str:
for (int i = 0; i <= str.length(); i++) {
    std::cout << str[i];
}
medium
A. Using <= causes out-of-bounds access
B. Missing semicolon after for loop
C. str[i] cannot be used to access characters
D. Loop variable should be unsigned

Solution

  1. Step 1: Analyze loop condition

    The loop runs while i <= str.length(), which means it tries to access str[str.length()].
  2. Step 2: Understand string indexing limits

    Valid indices are from 0 to str.length() - 1. Accessing str[str.length()] is out-of-bounds and causes undefined behavior.
  3. Final Answer:

    Using <= causes out-of-bounds access -> Option A
  4. Quick Check:

    Loop must use <, not <= [OK]
Hint: Use < not <= to avoid accessing past string end [OK]
Common Mistakes:
  • Using <= instead of < in loop condition
  • Assuming string length is last index
  • Ignoring out-of-bounds errors
5. Given a string str, how can you create a new string containing only the vowels from str using traversal and character access in C++?
hard
A. Loop through str, check if each character is a vowel, and append it to a new string
B. Use str.substr() to extract vowels directly
C. Replace all consonants with spaces in str
D. Sort the string and pick vowels from the start

Solution

  1. Step 1: Traverse the string character by character

    Use a loop to access each character in str using indexing.
  2. Step 2: Check if character is a vowel and build new string

    If the character is one of 'a', 'e', 'i', 'o', 'u' (case-insensitive), append it to a new string variable.
  3. Step 3: Return or print the new string

    After the loop, the new string contains only vowels from the original string.
  4. Final Answer:

    Loop through str, check if each character is a vowel, and append it to a new string -> Option A
  5. Quick Check:

    Filter vowels by checking each character [OK]
Hint: Check each char; add vowels to new string [OK]
Common Mistakes:
  • Trying to extract vowels without looping
  • Using substr incorrectly
  • Sorting string changes order
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