对比两个字符串

来源:互联网 发布:知乎 中科院上海微系统 编辑:程序博客网 时间:2024/06/01 04:00
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <string>
using namespace std;
int match(const char *str, const char *pattern)
{
//TODO:
string str_1=str;
string pat=pattern;
size_t star = pat.find('*');   //匹配多个
size_t question =pat.find('?');  //匹配一个


if (star == string::npos && question == string::npos)  
{
if(str_1.compare(pat)==0)
return 0;
else
return -1;
}
if (star != string::npos && question == string::npos) //出现了*
{


int f=0;
for(int i=0; i<star;i++)  //只比较星号之前的字符
{
if(str_1[i]!=pat[i])
{
f=-1;
}
}
if(f ==-1)
return f;
else
return 0;
}
if (star == string::npos && question != string::npos) //?
{
if(str_1.size()!=pat.size())
return -1;
int f=0;
for(int i=0; i<pat.size();i++)
{
if(i !=question && str_1[i]!=pat[i])
{
f=-1;
}
}
if(f ==-1)
return f;
else
return 0;
}
if (star != string::npos && question != string::npos) //都有
{


int f=0;
for(int i=0; i<star;i++)
{
if(i !=question && str_1[i]!=pat[i])
{
f=-1;
}
}
if(f ==-1)
return f;
else
return 0;
}
return 0;
}


int input(char **src, char **ptn)
{
char buf[10240];


*src = NULL;
*ptn = NULL;
if (fgets(buf, sizeof(buf), stdin) == 0)
goto failed_;
*src = strdup(buf);//strdup()在内部调用了malloc()为变量分配内存
if (fgets(buf, sizeof(buf), stdin) == 0)
goto failed_;
*ptn = strdup(buf);
return 0;
failed_:
if (*src)
free(*src);
if (*ptn)
free(*ptn);
*src = NULL;
*ptn = NULL;
return -1;
}


int main(int argc, char *argv[])
{
char *src = NULL;
char *ptn = NULL;


if (input(&src, &ptn) < 0) {
fprintf(stderr, "error\n");
return 0;
}


if (match(src, ptn) == 0) {
printf("match\n");
} else {
printf("unmatch\n");
}
if (src)
{
free(src);
}
if (ptn)
free(ptn);
return 0;
}
原创粉丝点击