免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4334 | 回复: 5
打印 上一主题 下一主题

[C] 请问C语言中strstr函数查找汉字时的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-11-06 05:19 |只看该作者 |倒序浏览
请看:
#include <stdio.h>
#include <string.h>
void main()
{
        char str[]="   hello 大家好  world 你好  ";
        char *p[6],*p1;
        int iLenf[6],iLenl[6],i,n;

        p[0]=strtok(str," ");
        n=1;
        while((p1=strtok(NULL," ")))
        {
        p[n++]=p1;
        }

        for(i=0;i<n;i++)
        {
            printf("%s,%s\n",p[i],strstr(str,p[i]));
            getchar();
        }
   
}
我发现第一次出现汉字后,strstr函数就出问题了,以后
找world也不行了,请问:如何解决这个的问题?

论坛徽章:
154
2022北京冬奥会纪念版徽章
日期:2015-08-07 17:10:5720周年集字徽章-年
日期:2022-10-26 16:44:2015-16赛季CBA联赛之深圳
日期:2022-11-02 14:02:4515-16赛季CBA联赛之八一
日期:2022-11-28 12:07:4820周年集字徽章-20	
日期:2023-07-19 08:49:4515-16赛季CBA联赛之八一
日期:2023-11-04 19:23:5115-16赛季CBA联赛之广夏
日期:2023-12-13 18:09:34
2 [报告]
发表于 2014-11-06 06:59 来自手机 |只看该作者
大神可以自己写一个啊

或者找个新接口图省事

论坛徽章:
0
3 [报告]
发表于 2014-11-06 07:39 |只看该作者
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
int main(int ac, char *av[])
{
        char str[]="   hello 大家好  world 你好  ";
        char buf[64];
        char *p[6],*p1;
        int i,n;

       
        printf("str = [%s] \n", str);
        strcpy(buf, str);

        p[0]=strtok(str," ");
        n=1;
        while((p1=strtok(NULL," ")))
        {
                p[n++]=p1;
        }

        for(i=0;i<n;i++)
        {
                printf("%s,%s\n",p[i],strstr(buf,p[i]));
                // getchar();
        }

        printf("\n\n");

        return 0;

}

执行结果

str = [   hello 大家好  world 你好  ]
hello,hello 大家好  world 你好  
大家好,大家好  world 你好  
world,world 你好  
你好,你好  

问题出在 strtok() 函数,该函数执行后,已经修改了输入缓冲区,将相应空格修改为字符串结束符,后面再执行  strstr 就出现了错误,无法再打印 str 缓冲区了。

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
4 [报告]
发表于 2014-11-06 11:33 |只看该作者
本帖最后由 yulihua49 于 2014-11-06 11:33 编辑
netdoger 发表于 2014-11-06 05:19
请看:
#include
#include

strtok破。。坏了原串,不是strstr的毛病。

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
5 [报告]
发表于 2014-11-10 11:09 |只看该作者
netdoger 发表于 2014-11-06 05:19
请看:
#include
#include

你完全是画蛇添足了。p[ i ]里已经等于strstr的结果。
如果你需要原串的偏移量,可以:p[ i ] - str

论坛徽章:
0
6 [报告]
发表于 2014-11-11 14:05 |只看该作者
美德要发扬,我们要顶帖!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP