DEV Community

uSay
uSay

Posted on

Range-based for loop with strings

This is post just for myself as a memo.

I am confused when I wrote range-based for loop, directly putting string as a target.
Putting string as the target of range-based for loop flashed into my mind when I practiced hashmap like:

int cnt = 0;
bool flag = true;
  while(flag){
    for(char &e: "balloon"){
      map[e]--;
      if(map[e] < 0) flag = false;
      }
      if(flag) cnt++;
    }
Enter fullscreen mode Exit fullscreen mode

However, this while loop finished after the 'n'.
I had no idea about this phenomenon.
This is why, I tested and tried to confirm their movement.

int main(void){
    // Your code here!
    for(auto e: "TestStrings"){
        cout << e << ':';
        printf("%X ", e);
    }
    cout << endl;
    string s = "TestStrings";
    for(auto &e: s){
        cout << e << ':';
        printf("%X ", e);
    }
}
Enter fullscreen mode Exit fullscreen mode

This code shows:

// T:54 e:65 s:73 t:74 S:53 t:74 r:72 i:69 n:6E g:67 s:73 :0 
// T:54 e:65 s:73 t:74 S:53 t:74 r:72 i:69 n:6E g:67 s:73
Enter fullscreen mode Exit fullscreen mode

Conclusion: The former has a NULL at its end of the line.

Top comments (0)