Search code examples
cstringdelimiterstrtok

Taking a string, and parsing/tokenizing into smaller strings using hyphen delimiter


I am tasked with writing a C program that will take a string with hyphens in it, and check to see that the first group of the string (before the hyphen) is alphabet/letter only, the next group is numeric only, and the last group is alphabet/letter only. It is similar to this project: http://wps.aw.com/wps/media/objects/7257/7431666/Case_Studies/GaddisJavaCSO_CS6.pdf

So far I am stuck on splitting the string into 3 variables. I have read about strtok and manipulating the scanf function, but I haven't been successful:

#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main ()
{
char serial [50];
char * part1 = NULL, part2 = NULL, part3 = NULL;
    printf("Enter Serial Number:\n");
    scanf("%s", serial);
 part1 = strtok (serial, "-");

 part2 = strtok(NULL, "-");
 part3 = strtok(NULL, "-");

    printf("You entered %s\n", part1);
    printf("You entered %s\n", part2);
    printf("You entered %s\n", part3);
return 0;
}

Solution

  • you are using strtok wrong, pass parameters to it and it should work fine.

    char * pch = strtok (serial, "-" );
    while (pch != NULL)
    {
      printf ("%s\n",pch);
      pch = strtok (NULL, "-");
    }
    

    or in your example you need to define each as a char* :

       char * part1= strtok (serial, "-");
       char * part2 = strtok(NULL, "-");
       char* part3 = strtok(NULL, "-")
    

    StrTok + example