#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 100
typedef struct LNode
{
char data;
struct LNode* next;
}LNode;
void initLinkList(LNode* pL)
{
int n, i = 0;
char a[MAXSIZE];
LNode* pR, * pS;
pR = pL;
while (1)
{
scanf("%c", &a[i]);
if (a[i] == '\n')
break;
i++;
}
n = strlen(a);
for (i = 0; i < n; i++)
{
if (a[i] == '\n')
break;
pS = (LNode*)malloc(sizeof(LNode));
pS->next = NULL;
pS->data = a[i];
pR->next = pS;
pR = pS;
}
}
void opLinkList(LNode* pLA, LNode* pLB, LNode* pLC, LNode* pLD)
{
LNode* pR, * pLQ, * pQ, * pLS, * pS, * pLT, * pT;
pR = pLA->next;
pLQ = pLB;
pLS = pLC;
pLT = pLD;
while (pR != NULL)
{
if (pR->data >= '0' && pR->data <= '9')
{
pQ = (LNode*)malloc(sizeof(LNode));
pQ->next = NULL;
pQ->data = pR->data;
pLQ->next = pQ;
pLQ = pQ;
}
else if ((pR->data >= 'a' && pR->data <= 'z') || (pR->data >= 'A' && pR->data <= 'Z'))
{
pS = (LNode*)malloc(sizeof(LNode));
pS->next = NULL;
pS->data = pR->data;
pLS->next = pS;
pLS = pS;
}
else
{
pT = (LNode*)malloc(sizeof(LNode));
pT->next = NULL;
pT->data = pR->data;
pLT->next = pT;
pLT = pT;
}
pR = pR->next;
}
}
void dispLinkList(LNode* pLB, LNode* pLC, LNode* pLD)
{
LNode* pR, * pS, *pT;
pR = pLB->next;
pS = pLC->next;
pT = pLD->next;
while (pR != NULL)
{
printf("%c", pR->data);
pR = pR->next;
}
printf("\n");
while (pS != NULL)
{
printf("%c", pS->data);
pS = pS->next;
}
printf("\n");
while (pT != NULL)
{
printf("%c", pT->data);
pT = pT->next;
}
printf("\n");
}
int main()
{
LNode* pLA, * pLB, * pLC, * pLD;
pLA = (LNode*)malloc(sizeof(LNode));
pLA->next = NULL;
pLB = (LNode*)malloc(sizeof(LNode));
pLB->next = NULL;
pLC = (LNode*)malloc(sizeof(LNode));
pLC->next = NULL;
pLD = (LNode*)malloc(sizeof(LNode));
pLD->next = NULL;
initLinkList(pLA);
opLinkList(pLA, pLB, pLC, pLD);
dispLinkList(pLB, pLC, pLD);
return 0;
}