Search code examples
carraysstringcharstring-comparison

How do I check if a string contains a certain character?


I'm fairly new to C programming, how would I be able to check that a string contains a certain character for instance, if we had:

void main(int argc, char* argv[]){

  char checkThisLineForExclamation[20] = "Hi, I'm odd!"
  int exclamationCheck;
}

So with this, how would I set exclamationCheck with a 1 if "!" is present and 0 if it's not? Many thanks for any assistance given.


Solution

  • By using strchr(), like this for example:

    #include <stdio.h>
    #include <string.h>
    
    int main(void)
    {
      char str[] = "Hi, I'm odd!";
      int exclamationCheck = 0;
      if(strchr(str, '!') != NULL)
      {
        exclamationCheck = 1;
      }
      printf("exclamationCheck = %d\n", exclamationCheck);
      return 0;
    }
    

    Output:

    exclamationCheck = 1

    If you are looking for a laconic one liner, then you could follow @melpomene's approach:

    int exclamationCheck = strchr(str, '!') != NULL;
    

    If you are not allowed to use methods from the C String Library, then, as @SomeProgrammerDude suggested, you could simply iterate over the string, and if any character is the exclamation mark, as demonstrated in this example:

    #include <stdio.h>
    
    int main(void)
    {
      char str[] = "Hi, I'm odd";
      int exclamationCheck = 0;
      for(int i = 0; str[i] != '\0'; ++i)
      {
        if(str[i] == '!')
        {
          exclamationCheck = 1;
          break;
        }
      }
      printf("exclamationCheck = %d\n", exclamationCheck);
      return 0;
    }
    

    Output:

    exclamationCheck = 0

    Notice that you could break the loop when at least one exclamation mark is found, so that you don't need to iterate over the whole string.


    PS: What should main() return in C and C++? int, not void.