对比两个字符串
来源:互联网 发布:知乎 中科院上海微系统 编辑:程序博客网 时间: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;
}
#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;
}
阅读全文
0 0
- 对比两个字符串
- sql中对比两个字符串中缺少的字符
- Java对比两个文件统计字符串相同行的数量
- 使用ScriptEngine实现两个标准json字符串对比
- 字符串对比
- 字符串对比
- 字符串对比
- 字符串对比
- 字符串对比
- 字符串对比
- 字符串对比
- 字符串对比
- 字符串对比
- 字符串对比
- 字符串对比
- 字符串对比
- 字符串对比
- 字符串对比
- js基础-javascript任督二脉-作用域链 ★★★
- mybatis if test 之 0当做参数传入出问题
- xinetd守护进程和service服务
- struts2 day02学习笔记
- Java字符串每四位隔一个空格
- 对比两个字符串
- Python2.x与3.x版本区别
- WebService 的创建,部署和使用
- 【选择题】Java基础测试二(15道)
- Xshell 连接到虚拟机的ubuntu
- HDU1163
- Rewrite – Apache转Lighttpd的伪静态rewrite方法
- Django blog
- 在同一台服务器上配置多个Tomcat