字符串模糊查找,该如何解决
字符串模糊查找
各位大虾是否有字符串模糊查找的类或者方法,这里的模糊查找不同于一般意义上的模糊查找,例子如下:
字符串A: string
字符串B: string 1
字符串C: string1
则,在B中A是100%出现,在C中A是??%的出现,这里C中的string1和string相差一个字符有一定的类似,所以返回一个??%的形式。
------解决方案--------------------
使用stl中的string or wstring find试试,找到了在判断下前后字符是否空格,
------解决方案--------------------
使用pkm算法 自己写一个吧。现成的貌似没有
------解决方案--------------------
看了都没看懂,楼住到底什么意思,似乎有点模糊
------解决方案--------------------
#include "iostream "
#include "stdio.h "
#include "stdlib.h "
using namespace std;
float find_str( char src[], char sub[])
{
char* k = strstr(src, sub);
if (!k)
return 0.f;
k += strlen(sub);
if (*k == ' ' || *k == '\t ' || *k == '\n ' || *k == 0)
return 1.f;
char* t = strchr(k, ' ');
if (!t)
t = strchr(k, '\t ');
if (!t)
t = strchr(k, '\n ');
if (t)
return (float)strlen(sub) / (float)((t - k) + strlen(sub));
else
return (float)strlen(sub) / (float)(src + strlen(src) - k + strlen(sub));
}
int main(void)
{
char s0[] = "string ";
char s1[] = "string1 ";
char s2[] = "string 1 ";
cout < <s0 < < " -- " < <s1 < < " : " < <(int)(find_str(s1, s0) * 100) < < "% " < <endl;
cout < <s0 < < " -- " < <s2 < < " : " < <(int)(find_str(s2, s0) * 100) < < "% " < <endl;
}
------解决方案--------------------
如果比较多的话可以用数据库来处理这种事情
select ,, from ,, where ,, like '%,,% '
各位大虾是否有字符串模糊查找的类或者方法,这里的模糊查找不同于一般意义上的模糊查找,例子如下:
字符串A: string
字符串B: string 1
字符串C: string1
则,在B中A是100%出现,在C中A是??%的出现,这里C中的string1和string相差一个字符有一定的类似,所以返回一个??%的形式。
------解决方案--------------------
使用stl中的string or wstring find试试,找到了在判断下前后字符是否空格,
------解决方案--------------------
使用pkm算法 自己写一个吧。现成的貌似没有
------解决方案--------------------
看了都没看懂,楼住到底什么意思,似乎有点模糊
------解决方案--------------------
#include "iostream "
#include "stdio.h "
#include "stdlib.h "
using namespace std;
float find_str( char src[], char sub[])
{
char* k = strstr(src, sub);
if (!k)
return 0.f;
k += strlen(sub);
if (*k == ' ' || *k == '\t ' || *k == '\n ' || *k == 0)
return 1.f;
char* t = strchr(k, ' ');
if (!t)
t = strchr(k, '\t ');
if (!t)
t = strchr(k, '\n ');
if (t)
return (float)strlen(sub) / (float)((t - k) + strlen(sub));
else
return (float)strlen(sub) / (float)(src + strlen(src) - k + strlen(sub));
}
int main(void)
{
char s0[] = "string ";
char s1[] = "string1 ";
char s2[] = "string 1 ";
cout < <s0 < < " -- " < <s1 < < " : " < <(int)(find_str(s1, s0) * 100) < < "% " < <endl;
cout < <s0 < < " -- " < <s2 < < " : " < <(int)(find_str(s2, s0) * 100) < < "% " < <endl;
}
------解决方案--------------------
如果比较多的话可以用数据库来处理这种事情
select ,, from ,, where ,, like '%,,% '