#include "stdafx.h"
#include <stdio.h>
#include <windows.h>
#include <string>
using namespace std;
int SplitCount(const char *src, const char *split);
int Split(char *src, const char *split, char **dst, int count);
void TestSplit1();
void TestSplit2();
void TestSplit3();
int _tmain(int argc, _TCHAR* argv[])
{
TestSplit3();
return 0;
}
void TestSplit3()
{
wchar_t s[] = L"123-sldkf-123ls-343434-dfjdlkfj-dflcmvn";
wchar_t *delim = L"-";
wchar_t *p;
p = wcstok(s, delim);
while (p != NULL) {
printf("%ws\n", p);
p = wcstok(NULL, delim);
}
}
void TestSplit2()
{
char s[] = "123-sldkf-123ls-343434-dfjdlkfj-dflcmvn";
char *delim = "-";
char *p;
p = strtok(s, delim);
while (p != NULL) {
printf("%s\n", p);
p = strtok(NULL, delim);
}
}
void TestSplit1()
{
char s[] = "123-sldkf-123ls-343434-dfjdlkfj-dflcmvn";
char *delim = "-";
char **p;
int n = 0;
string str[6];
n = SplitCount(s, delim);
p = (char **)malloc(256);
Split(s, delim, p, n);
for (int i = 0; i < n; i++)
{
str[i] = p[i];
}
free(p);
}
int SplitCount(const char *src, const char *split)
{
int n = 0;
int len;
const char *p;
len = strlen(split);
p = src;
if (*p != ‘\0‘)
{
n++;
while (*p != ‘\0‘)
{
// Compare bytes
if (memcmp(p, split, len) == 0)
{
p += len;
if (*p == ‘\0‘) break;
//
n++;
}
else {
// Next char
p++;
}
}
}
return n;
}
int Split(char *src, const char *split, char **dst, int count)
{
int n = 0;
int len;
char *p;
len = strlen(split);
p = src;
if (*p != ‘\0‘ && n < count)
{
dst[n++] = p;
while (*p != ‘\0‘ && n < count)
{
// Compare bytes
if (memcmp(p, split, len) == 0)
{
// Fill
memset(p, 0, len);
p += len;
if (*p == ‘\0‘ || n >= count) break;
//
dst[n++] = p;
}
else {
// Next char
p++;
}
}
}
return n;
}