C/C++ Arena

Step 5 of 6

Characters are numbers

A char is a small integer holding a character code, so you can do arithmetic and comparisons on characters. In ASCII, the letters 'a' to 'z' have consecutive codes (97 to 122), and so do 'A' to 'Z' (65 to 90) and the digits '0' to '9' (48 to 57). That makes several tricks possible:

#include <stdio.h>

int digit_sum(const char s[]) {
    int sum = 0;
    for (int i = 0; s[i] != '\0'; i++) {
        if (s[i] >= '0' && s[i] <= '9') {
            sum += s[i] - '0';
        }
    }
    return sum;
}

int main(void) {
    printf("%d\n", digit_sum("a1b2c3"));
    printf("%c%c\n", 'a' + 7, 'A' + ('e' - 'a'));
    return 0;
}
6
hE

The <ctype.h> helpers

The standard library has ready-made, readable versions of these checks: isdigit(c), isalpha(c), islower(c), isupper(c), isspace(c), and converters toupper(c) and tolower(c), which return the converted character (or the same character if there's nothing to convert). They're clearer than hand-written ranges, so prefer them in real code.

Changing a string in place

To modify a string, loop over it and assign to s[i]. Only change the characters that need changing; everything else, including spaces, digits and the terminator, must stay as it was.

Your turn: write void to_upper(char s[]) that converts every lowercase letter in the string to uppercase in place. Leave other characters alone.

Previous: Compare strings correctly Next: Challenge: palindromes