You can just replace the line
char c = s[si];
in draw() and measure() by
uint8_t c = s[i];
The problem with the characters still being wrong is probably an encoding issue.
Using one unsigned char like that for accented latin characters would work if your input string was encoded in ISO 8859 format, but nowadays it is probably UTF-8. It depends where your string comes from really, if it's directly from the C++ source itself it may be encoded as pretty much anything depending on the compiler.
But it's likely to be UTF-8, which encodes all characters with a code higher than 127 as two characters.
So (if your text is indeed in UTF-8) you have to decode that to get the proper character codes. It's pretty easy to do but there are also libraries around (such as http://utfcpp.sourceforge.net/) that can do it for you.