前言
个人小记
一、代码如下
#include<stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LEN 10
typedef struct Stack
{
char* str;
int top, size;
}Stack;
Stack* init_stack(int n)
{
Stack* S = (Stack*)malloc(sizeof(Stack));
S->top = -1;
S->str = (char*)malloc(sizeof(char) * n);
S->size = n;
return S;
}
char search(Stack* S)
{
if (S == NULL)return '\0';
return S->str[S->top];
}
int push(Stack* S, char c)
{
if (S->top == S->size - 1)return 0;
S->str[++S->top] = c;
return 1;
}
int pop(Stack* S)
{
if (S->top == -1)return 0;
S->top--;
return 1;
}
void clear_stack(Stack* S)
{
if (S == NULL)return;
free(S->str);
free(S);
return;
}
char* func(Stack* S, char* c)
{
int len = strlen(c);
for (int i = 0; i < len; i++)
{
if (c[i] == '$')pop(S);
else push(S, c[i]);
}
S->str[S->top+1]='\0';
return S->str;
}
int main()
{
char c[MAX_LEN];
Stack* S = init_stack(MAX_LEN);
printf("请输入第一个字符串:");
scanf("%s", c);
char *s1=func(S,c);
char *new_s=(char*)malloc(strlen(s1)+1);
strcpy(new_s,s1);
printf("请输入第二个字符串:");
scanf("%s", c);
S->top=-1;//清栈
char * s2=func(S,c);
if (strcmp(new_s, s2))printf("不匹配\n");
else printf("匹配\n");
clear_stack(S);
free(new_s);
return 0;
}
二、测试结果
请输入第一个字符串:qwe
请输入第二个字符串:ewq
不匹配
sjq@SEER:~/coding$ ./a.out
请输入第一个字符串:qwe
请输入第二个字符串:qwe
匹配
sjq@SEER:~/coding$ ./a.out
请输入第一个字符串:qwe$
请输入第二个字符串:qw
匹配