In this code snippet, we’ll show an example of a C language function to split a comma or other delimited string into an array.
A C language function to split a comma or other delimited string into an array.
int split(const char *str, char delimiter, char ***result) {
// Count the number of delimiters to determine the size of the array
for (int i = 0; i < len; i++) {
if (str[i] == delimiter) {
// Allocate memory for the array of pointers to substrings
*result = (char **)malloc(count * sizeof(char *));
fprintf(stderr, "Memory allocation error.\n");
// Split the string into substrings based on the delimiter
for (int i = 0; i <= len; i++) {
if (str[i] == delimiter || str[i] == '\0') {
int substringLen = i - start;
// Allocate memory for each substring
(*result)[index] = (char *)malloc((substringLen + 1) * sizeof(char));
if ((*result)[index] == NULL) {
fprintf(stderr, "Memory allocation error.\n");
// Copy the substring into the array
strncpy((*result)[index], &str[start], substringLen);
(*result)[index][substringLen] = '\0';
const char *str = "Hello,World,Split,Function";
int count = split(str, delimiter, &result);
printf("The array contains %d elements:\n", count);
for (int i = 0; i < count; i++) {
printf("%s , ", result[i]);
free(result[i]); // Free the memory allocated for each substring
free(result); // Free the memory allocated for the array of pointers
printf("No elements found.\n");
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int split(const char *str, char delimiter, char ***result) {
int count = 1;
int len = strlen(str);
// Count the number of delimiters to determine the size of the array
for (int i = 0; i < len; i++) {
if (str[i] == delimiter) {
count++;
}
}
// Allocate memory for the array of pointers to substrings
*result = (char **)malloc(count * sizeof(char *));
if (*result == NULL) {
fprintf(stderr, "Memory allocation error.\n");
return 0;
}
int index = 0;
int start = 0;
// Split the string into substrings based on the delimiter
for (int i = 0; i <= len; i++) {
if (str[i] == delimiter || str[i] == '\0') {
int substringLen = i - start;
// Allocate memory for each substring
(*result)[index] = (char *)malloc((substringLen + 1) * sizeof(char));
if ((*result)[index] == NULL) {
fprintf(stderr, "Memory allocation error.\n");
return 0;
}
// Copy the substring into the array
strncpy((*result)[index], &str[start], substringLen);
(*result)[index][substringLen] = '\0';
start = i + 1;
index++;
}
}
return count;
}
int main() {
const char *str = "Hello,World,Split,Function";
char delimiter = ',';
char **result;
int count = split(str, delimiter, &result);
if (count > 0) {
printf("The array contains %d elements:\n", count);
printf("[");
for (int i = 0; i < count; i++) {
if (i == count-1)
printf("%s", result[i]);
else
printf("%s , ", result[i]);
free(result[i]); // Free the memory allocated for each substring
}
printf("]");
free(result); // Free the memory allocated for the array of pointers
} else {
printf("No elements found.\n");
}
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int split(const char *str, char delimiter, char ***result) {
int count = 1;
int len = strlen(str);
// Count the number of delimiters to determine the size of the array
for (int i = 0; i < len; i++) {
if (str[i] == delimiter) {
count++;
}
}
// Allocate memory for the array of pointers to substrings
*result = (char **)malloc(count * sizeof(char *));
if (*result == NULL) {
fprintf(stderr, "Memory allocation error.\n");
return 0;
}
int index = 0;
int start = 0;
// Split the string into substrings based on the delimiter
for (int i = 0; i <= len; i++) {
if (str[i] == delimiter || str[i] == '\0') {
int substringLen = i - start;
// Allocate memory for each substring
(*result)[index] = (char *)malloc((substringLen + 1) * sizeof(char));
if ((*result)[index] == NULL) {
fprintf(stderr, "Memory allocation error.\n");
return 0;
}
// Copy the substring into the array
strncpy((*result)[index], &str[start], substringLen);
(*result)[index][substringLen] = '\0';
start = i + 1;
index++;
}
}
return count;
}
int main() {
const char *str = "Hello,World,Split,Function";
char delimiter = ',';
char **result;
int count = split(str, delimiter, &result);
if (count > 0) {
printf("The array contains %d elements:\n", count);
printf("[");
for (int i = 0; i < count; i++) {
if (i == count-1)
printf("%s", result[i]);
else
printf("%s , ", result[i]);
free(result[i]); // Free the memory allocated for each substring
}
printf("]");
free(result); // Free the memory allocated for the array of pointers
} else {
printf("No elements found.\n");
}
return 0;
}
MIT Licensed Code – See License
Tags: C, split string, comma separated values, csv, delimited string, c method, stdio, stdlib, array, strncpy, split, pointer allocation, free, memory allocation, free memory