#include "stdio.h"
#include <stdlib.h>
#include "string.h"
#define CONST_SPACE ' '
int getWordCount(char *pString)
{
int flag = 0;
int count = 0;
if(pString == NULL)
return 0;
char *p = pString;
while(*p != '\0')
{
if(*p == CONST_SPACE)
{
flag = 0;
}
else if(flag == 0)
{
flag = 1;
count ++;
}
p++;
}
printf("String = %s, cnt = %d \n", pString , count);
return count;
}
void setWordInfo(char *pString, char** ppWords, int *pWordLen, int cnt)
{
int flag = 0;
int index =0;
char *p = pString;
int wordLen = 0;
while(*p != '\0')
{
if(*p == CONST_SPACE)
{
if(flag == 1)
{
pWordLen[index] = wordLen;
wordLen = 0;
index++;
}
flag = 0;
}
else
{
if(flag == 0)
{
flag = 1;
ppWords[index] = p;
}
wordLen ++;
}
p++;
}
if(*(p-1) != CONST_SPACE)
{
pWordLen[index] = wordLen;
}
return;
}
int cmpStr(char *s1, int len1, char *s2, int len2)
{
int index = 0;
int minLen = len1>len2 ? len2 : len1;
for(;*s1==*s2;++s1,++s2)
{
index ++;
if(*s1=='\0' || *s2 == '\0' || index >= minLen)
break;
}
printf("s1=%s, s2=%s, cmpstr index = %d", s1, s2, index);
return index;
}
int matchname(char* pName, int nameLen, char* pQueryStr, int queryLen)
{
//get the number of words
int iCnt = getWordCount(pName);
char **ppWords = NULL;
int *pWordLen = NULL;
int memLen = iCnt * (sizeof(char*) + sizeof(int*));
char* pMem = (char*)malloc(memLen);
if(pMem == NULL)
{ printf("ERROR!\n");
return -1;
}
ppWords = (char**)pMem;
pWordLen = (int*)(pMem + iCnt * sizeof(char*));
//divide the name to words
setWordInfo(pName, ppWords, pWordLen, iCnt);
int i =0;
for(i=0; i<iCnt; i++)
{
printf("ppWords[%d] = %s, pWordLen[%d] = %d \n", i, ppWords[i], i, pWordLen[i]);
}
//match name
return 0;
}
void testmatch(char *pName, char *pQuery)
{
matchname(pName, strlen(pName), pQuery, strlen(pQuery));
}
int main(int argc, char*arg[])
{
testmatch("TANG CHENG KAI", "KAI");
cmpStr("ABC",3, "AB", 2);
printf("================\n");
}
#include <stdlib.h>
#include "string.h"
#define CONST_SPACE ' '
int getWordCount(char *pString)
{
int flag = 0;
int count = 0;
if(pString == NULL)
return 0;
char *p = pString;
while(*p != '\0')
{
if(*p == CONST_SPACE)
{
flag = 0;
}
else if(flag == 0)
{
flag = 1;
count ++;
}
p++;
}
printf("String = %s, cnt = %d \n", pString , count);
return count;
}
void setWordInfo(char *pString, char** ppWords, int *pWordLen, int cnt)
{
int flag = 0;
int index =0;
char *p = pString;
int wordLen = 0;
while(*p != '\0')
{
if(*p == CONST_SPACE)
{
if(flag == 1)
{
pWordLen[index] = wordLen;
wordLen = 0;
index++;
}
flag = 0;
}
else
{
if(flag == 0)
{
flag = 1;
ppWords[index] = p;
}
wordLen ++;
}
p++;
}
if(*(p-1) != CONST_SPACE)
{
pWordLen[index] = wordLen;
}
return;
}
int cmpStr(char *s1, int len1, char *s2, int len2)
{
int index = 0;
int minLen = len1>len2 ? len2 : len1;
for(;*s1==*s2;++s1,++s2)
{
index ++;
if(*s1=='\0' || *s2 == '\0' || index >= minLen)
break;
}
printf("s1=%s, s2=%s, cmpstr index = %d", s1, s2, index);
return index;
}
int matchname(char* pName, int nameLen, char* pQueryStr, int queryLen)
{
//get the number of words
int iCnt = getWordCount(pName);
char **ppWords = NULL;
int *pWordLen = NULL;
int memLen = iCnt * (sizeof(char*) + sizeof(int*));
char* pMem = (char*)malloc(memLen);
if(pMem == NULL)
{ printf("ERROR!\n");
return -1;
}
ppWords = (char**)pMem;
pWordLen = (int*)(pMem + iCnt * sizeof(char*));
//divide the name to words
setWordInfo(pName, ppWords, pWordLen, iCnt);
int i =0;
for(i=0; i<iCnt; i++)
{
printf("ppWords[%d] = %s, pWordLen[%d] = %d \n", i, ppWords[i], i, pWordLen[i]);
}
//match name
return 0;
}
void testmatch(char *pName, char *pQuery)
{
matchname(pName, strlen(pName), pQuery, strlen(pQuery));
}
int main(int argc, char*arg[])
{
testmatch("TANG CHENG KAI", "KAI");
cmpStr("ABC",3, "AB", 2);
printf("================\n");
}