Search code examples
cswitch-statementasciic-strings

C switch case using char[2]


I'm trying to use switch case with char[2] in C, but it only supports integers.

int main() {
        char c[2] = "h";
        switch (c) {
                case "h":
                        printf("done!");
        }
        return 1;
}

For better understanding, what I'm trying to do is:

if "h" in ")($+#&@+)#"

Basically I want to make a condition that matches a character with a group of characters, but efficiently, the first thing that came to mind is to use switch case but it only supports int. But when I use (int)c which is recommended in other stackoverflow answers, it doesn't return the ascii value.


Solution

  • You can't compare arrays of characters (strings) using a switch statement directly, because switch statements only work with fundamental types; not arrays of fundamental types.

    The reason using (int)c isn't returning the ASCII value is because you're casting char[]->int instead of char->int.

    The difference between single and double quotes is an important one in C:

    • 'h' is of type char, and is equal to 104 (Lowercase 'h' in ASCII)
    • "h" is of type const char*, and points to 2 characters: h, & the null terminating character \0

    To check if a character is present in a string, you can use the strchr function as mentioned in Vlad from Moscow's answer, or if you want to do it yourself using switch statements you could try this:

    int main()
    {
        char c[2] = "h";
        bool found = false;
        for (int i = 0; i < 2; ++i) {
            switch (c[i]) {
            case 'h': // compare c[i] == 'h'
                found = true;
                break;
            default:
                break;
            }
        }
        if (found)
            printf("Done!");
        return 0;
    }