第1个回答 2010-08-25
#include <string.h>
#include <stdio.h>
struct NODE
{
char *pStr;
int strCount;
NODE *pNext;
};
NODE* findString(NODE *pFirst,const char *str);
void addNode(NODE *pFirst,const char *str);
void CreateNode(NODE **ppNode,const char *str);
void ReleaseNode(NODE *pNode);
int main(int argc, char* argv[])
{ "char str[] = "abc abc bbb ccc bbb ccc aaa csa fgh dd abc";
char spe[] = " \t\n";
char *toke = strtok(str,spe);
NODE *pNodeHead = NULL;
while (NULL != toke )
{
if (NULL == pNodeHead)
{
CreateNode(&pNodeHead,toke);
toke = strtok(NULL,spe);
continue;
}
NODE *pTmpNode = findString(pNodeHead,toke);
if (NULL == pTmpNode)
{
addNode(pNodeHead,toke);
}else
{
++(pTmpNode->strCount);
}
toke = strtok(NULL,spe);
}
NODE *tmp = pNodeHead;
if (NULL == pNodeHead)
{
return 1;
}
while (pNodeHead)
{
cout<<pNodeHead->pStr<<" "<<pNodeHead->strCount<<endl;
pNodeHead = pNodeHead->pNext;
}
return 0;
}
NODE* findString(NODE *pFirst,const char *str)
{
if (NULL == pFirst)
{
return NULL;
}
do
{
if (0 == strcmp(pFirst->pStr,str))
{
return pFirst;
}
}while(pFirst = pFirst->pNext);
return NULL;
}
void addNode(NODE *pNode,const char *str)
{
if (pNode == NULL)
{
return;
}
while (NULL != pNode->pNext)
{
pNode = pNode->pNext;
}
pNode->pNext = (NODE*)malloc(sizeof(NODE));
pNode = pNode->pNext;
memset(pNode,0,sizeof(NODE));
pNode->pStr = (char*)malloc(strlen(str));
strcpy(pNode->pStr,str);
++(pNode->strCount);
pNode->pNext = NULL;
return;
}
void CreateNode(NODE **ppNode,const char *str)
{
NODE *node;
node = (NODE*)malloc(sizeof(NODE));
memset(node,0,sizeof(NODE));
node->pStr = (char*)malloc(strlen(str));
strcpy(node->pStr,str);
++(node->strCount);
node->pNext = NULL;
*ppNode = node;
}
没写释放的部分,你自己加上吧。