strstr函数查找中文问题

hyzhj2156 2008-12-15 07:44:30
在使用strstr查找字串的时候,如果字串包含中文。
因为中文占2个字符的问题,会返回错误的值。
如:在"缝纫机"里能查找到"一"、在"几率值"里能查找到"屎"。
请问如何处理?是否有支持的函数,或者请给个通用算法:输入为中文或英文,查找串为中文或英文。返回是否存在字串。谢谢了
...全文
902 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
ender1000 2009-11-18
  • 打赏
  • 举报
回复
哎 unix环境不能用 白高兴了
icefireelf 2008-12-17
  • 打赏
  • 举报
回复
#include <mbstring.h>
char *s ="缝纫机";
const unsigned char* f = _mbsstr((const unsigned char*)s, (const unsigned char*)"一");
证明找不到,所以能用
icefireelf 2008-12-17
  • 打赏
  • 举报
回复
mbsstr不行吗?
hyzhj2156 2008-12-16
  • 打赏
  • 举报
回复
4楼,我知道不难,但是我需要的是效率。
strstr是汇编实现的。我自己写的效率肯定没这个高吧。
我想知道有没效率高的支持中文英文混合查找的函数。
hyzhj2156 2008-12-16
  • 打赏
  • 举报
回复
7楼:我那个函数已经测试通过了。现在就是需要速度优化。你的那个我还没试呢,呵呵
8楼:谢谢你这个方法,我一会试下哈~
aqbidt 2008-12-16
  • 打赏
  • 举报
回复
先使用MultiByteToWideChar转换为wchar后再调用wcstr
::MultiByteToWideChar(CP_ACP, MB_ERR_INVALID_CHARS, szStr, 0, wszStr, len)
Nirvana7 2008-12-16
  • 打赏
  • 举报
回复
上面的这个函数应该不可以吧



char* strstrc(char* pp,char* pd)
{
char *sou = pp;
char *des = pd;
if(*sou == NULL||*pd ==NULL)
return sou;
while((*sou!=NULL)&&(*des!=NULL))
{
if(*sou==*des)
{
char* ts = sou;
char* td = des;
ts++;
td++;
while((*ts!=NULL)&&(*td!=NULL))
{
if(*ts==*td)
{
ts++;
td++;
}
else
break;
}
if(*td==NULL)
{
des = td;
break;
}
else
{
sou++;
}
}
else
{
sou++;
}
}
if(*des==NULL)
return pp;
return NULL;
}
hyzhj2156 2008-12-16
  • 打赏
  • 举报
回复
#include <iostream.h>

char *strstr2(char *str, char *strSearch);

void main()
{
char* szTest = "a缝纫机1";
char* sz2 = strstr2(szTest, "一");

if(sz2!=NULL)
cout<<sz2<<endl;
else
cout<<"Not Found!"<<endl;

getchar();
}

char *strstr2(char *str, char *strSearch)
{
char *strTemp;
char *strSearchTemp;
while(*str!='\0')
{
strTemp=str;
strSearchTemp=strSearch;

while((*strTemp==*strSearchTemp)&&(*strTemp!='\0')&&(*strSearchTemp!='\0'))
{
strTemp++;
strSearchTemp++;
}

if(*strSearchTemp=='\0')
return str;

unsigned char code = *str;
//判断是否为中文,是则地址加2,否则加1
if( code>=0x80 )
str += 2;
else
str++;
}
return NULL;
}

算法我自己找了个~看看有么大佬帮忙优化下。能到strstr的汇编速度。
SearchLife 2008-12-15
  • 打赏
  • 举报
回复
自己写一个吧,不难
hyzhj2156 2008-12-15
  • 打赏
  • 举报
回复
1楼,谢谢up
2楼,wcsstr我知道,但是他的参数必须是wchar_t的。我的输入是中文或者英文的。
所以需要一个效率比较高的支持char和wchat的函数。谢谢
帅得不敢出门 2008-12-15
  • 打赏
  • 举报
回复
wchar_t *wcsstr(
const wchar_t *str,
const wchar_t *strSearch
); // C only
wchar_t *wcsstr(
wchar_t *str,
const wchar_t *strSearch
); // C++ only
const wchar_t *wcsstr(
const wchar_t *str,
const wchar_t *strSearch
); // C++ only
liubuweiright 2008-12-15
  • 打赏
  • 举报
回复
up

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧