Bird
Raised Fist0
DSA Goprogramming~10 mins

String Traversal and Character Access in DSA Go - Execution Trace

Choose your learning style10 modes available
Concept Flow - String Traversal and Character Access
Start at index = 0
↓
Check: index < length?
No→END
Yes↓
Access character at index
↓
Use or print character
↓
Increment index by 1
↩Back to Check
Start from the first character, check if index is within string length, access character, then move to next index until end.
Execution Sample
DSA Go
package main

import "fmt"

func main() {
    s := "GoLang"
    for i := 0; i < len(s); i++ {
        fmt.Printf("%c", s[i])
    }
}
This code prints each character of the string "GoLang" one by one.
Execution Table
StepIndex iCondition i < len(s)Character Accessed s[i]ActionOutput
100 < 6 = True'G'Print 'G'G
211 < 6 = True'o'Print 'o'Go
322 < 6 = True'L'Print 'L'GoL
433 < 6 = True'a'Print 'a'GoLa
544 < 6 = True'n'Print 'n'GoLan
655 < 6 = True'g'Print 'g'GoLang
766 < 6 = FalseN/AExit loopFinal output: GoLang
💡 Index i reaches 6, condition 6 < 6 is False, loop ends.
Variable Tracker
VariableStartAfter 1After 2After 3After 4After 5After 6Final
i01234566
Output"""G""Go""GoL""GoLa""GoLan""GoLang""GoLang"
Key Moments - 3 Insights
Why does the loop stop when i equals the string length?
Because the condition i < len(s) becomes false at i = 6 (string length), so the loop exits as shown in execution_table row 7.
What does s[i] represent inside the loop?
s[i] accesses the character at position i in the string, as seen in execution_table rows 1 to 6 where each character is printed.
Why do we start the index i at 0 instead of 1?
String indexing starts at 0 in Go, so the first character is at s[0], shown in execution_table row 1.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what character is accessed at step 4?
A'L'
B'a'
C'n'
D'g'
💡 Hint
Check the 'Character Accessed s[i]' column at step 4 in the execution_table.
At which step does the loop condition become false?
AStep 7
BStep 6
CStep 5
DStep 1
💡 Hint
Look at the 'Condition i < len(s)' column in execution_table where it shows False.
If the string was "Go" instead of "GoLang", how many times would the loop run?
A6 times
B1 time
C2 times
D0 times
💡 Hint
Refer to variable_tracker for i values and string length in execution_table.
Concept Snapshot
String Traversal and Character Access in Go:
- Use a for loop with index i from 0 to len(s)-1
- Access characters by s[i]
- Loop stops when i equals string length
- Prints or processes each character one by one
- Indexing starts at 0
Full Transcript
This lesson shows how to go through a string one character at a time in Go. We start with an index i at 0 and check if it is less than the string length. If yes, we get the character at s[i] and print it. Then we increase i by 1 and repeat. When i reaches the string length, the loop stops. This way, we access each character in order from start to end.

Practice

(1/5)
1. What does the expression len(s) return when s is a string in Go?
easy
A. The first character of the string
B. The number of characters (runes) in the string
C. The last character of the string
D. The number of bytes in the string

Solution

  1. Step 1: Understand what len does on strings in Go

    In Go, len(s) returns the number of bytes, not characters, because strings are byte slices.
  2. Step 2: Differentiate bytes and characters

    Characters (runes) can be multiple bytes, so len counts bytes, not runes.
  3. Final Answer:

    The number of bytes in the string -> Option D
  4. Quick Check:

    len(s) = bytes count [OK]
Hint: Remember: len counts bytes, not characters in Go strings [OK]
Common Mistakes:
  • Thinking len counts characters (runes)
  • Confusing bytes with characters
  • Assuming len returns a character
2. Which of the following is the correct way to access the third character of a string s in Go?
easy
A. s[3]
B. s[2]
C. s.charAt(2)
D. s.get(2)

Solution

  1. Step 1: Recall Go string indexing

    Go strings can be indexed like byte slices, starting at 0, so the third character is at index 2.
  2. Step 2: Check syntax options

    Only s[2] is valid Go syntax for accessing a byte at index 2.
  3. Final Answer:

    s[2] -> Option B
  4. Quick Check:

    Indexing starts at 0, third char = s[2] [OK]
Hint: Indexing starts at 0; third char is s[2] in Go [OK]
Common Mistakes:
  • Using 1-based indexing like s[3]
  • Using methods like charAt or get which don't exist in Go
  • Confusing bytes with runes
3. What is the output of the following Go code?
package main
import "fmt"
func main() {
  s := "GoLang"
  fmt.Println(string(s[1]))
}
medium
A. o
B. G
C. 1
D. Syntax error

Solution

  1. Step 1: Identify the character at index 1

    String "GoLang" indexed at 1 is byte for 'o'.
  2. Step 2: Convert byte to string for printing

    Using string(s[1]) converts byte 'o' to string "o".
  3. Final Answer:

    o -> Option A
  4. Quick Check:

    s[1] = 'o' printed as string [OK]
Hint: s[index] gives byte; convert to string to print char [OK]
Common Mistakes:
  • Printing byte as number instead of string
  • Confusing index 1 with 0
  • Expecting syntax error
4. What is wrong with this Go code snippet?
package main
import "fmt"
func main() {
  s := "hello"
  for i := 0; i <= len(s); i++ {
    fmt.Printf("%c", s[i])
  }
}
medium
A. Loop condition causes index out of range error
B. fmt.Printf format specifier is incorrect
C. String s is not initialized properly
D. for loop syntax is invalid

Solution

  1. Step 1: Analyze loop range

    The loop runs from i=0 to i=len(s) inclusive, but valid indices are 0 to len(s)-1.
  2. Step 2: Identify error cause

    At i=len(s), s[i] causes index out of range runtime error.
  3. Final Answer:

    Loop condition causes index out of range error -> Option A
  4. Quick Check:

    Index must be less than len(s) [OK]
Hint: Loop index must be < len(s), not <= len(s) [OK]
Common Mistakes:
  • Using <= instead of < in loop condition
  • Ignoring runtime index out of range error
  • Misunderstanding string indexing
5. Given a string s containing Unicode characters, which Go code snippet correctly prints each character (rune) on a new line?
hard
A. for i := 0; i < len(s); i++ { fmt.Println(string(s[i])) }
B. for i := range s { fmt.Println(s[i]) }
C. for _, r := range s { fmt.Println(string(r)) }
D. for i := 0; i <= len(s); i++ { fmt.Println(s[i]) }

Solution

  1. Step 1: Understand Unicode handling in Go strings

    Go strings are byte slices; indexing gives bytes, not runes. To get runes, use range loop.
  2. Step 2: Check each option

    for _, r := range s { fmt.Println(string(r)) } uses for _, r := range s which iterates runes correctly and prints each rune as string.
  3. Final Answer:

    for _, r := range s { fmt.Println(string(r)) } -> Option C
  4. Quick Check:

    Use range to iterate runes in string [OK]
Hint: Use range loop to get runes, not byte indexing [OK]
Common Mistakes:
  • Using byte indexing for Unicode characters
  • Looping with <= len(s)
  • Printing bytes directly without conversion
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