Split a String Using Delimiter

Code

#include <stdio.h>
#include <stdint.h>

void split_string(const char *str, char delimiter, char tokens[10][20], uint8_t *count) {
    // Your logic here
    int row =0, col = 0;

    while(*str){
        char c = *str;
        if(c==delimiter){
            tokens[row][col] = '\0';
            row++; col = 0;
            (*count)++;
        }else{
            tokens[row][col++] = c;  
        }
        str++;
    }

    tokens[row][col] = '\0';
    (*count)++;

}

int main() {
    char str[101];
    char delimiter;
    fgets(str, sizeof(str), stdin);
    scanf(" %c", &delimiter);

    // Remove newline
    uint8_t i = 0;
    while (str[i]) {
        if (str[i] == '\n') { str[i] = '\0'; break; }
        i++;
    }

    char tokens[10][20];
    uint8_t count = 0;

    split_string(str, delimiter, tokens, &count);

    for (uint8_t i = 0; i < count; i++) {
        printf("%s\n", tokens[i]);
    }

    return 0;
}

Solving Approach

Initialize row and col to be 0

Run a loop until the end of string is reached:

  • Each time a character other than delimmiter is seen, it is added to tokens array and col is incremented
  • If delimmiter is seen, we have parsed on succesful token so we can add \0 to end the string and increment the row for next token, incrment count 

For the last token, as there is no delimmiter after, we can add a \0 to current row and col and increment the count pointer

 

 

Upvote
Downvote
Loading...

Input

cmd1,cmd2,cmd3 ,

Expected Output

cmd1 cmd2 cmd3