You can't assign integers to strings like that. The reason it works is because string has an operator= that takes a char as argument so it implicitly casts the int to a char and put that in the string. It is not really what you want. If you want to convert an int to a string you can use std::ostringstream or if your compiler is up to date you can use the std::to_string function.
card1 is a string. When you set the first character of the string to a number between 1 and 13, you are setting it to one of the values found here: http://www.asciitable.com/
If you actually want it to read as 13, make card1 an int, long or short. Note that card1 does not actually contain a suit. it just contains that number.