免费注册 查看新帖 |

Chinaunix

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

反对比字符串 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-30 01:20 |只看该作者 |倒序浏览
今天翻起以前的K&R的书, 有道题目是这样的:

2个字符串,如果一个字符串属于另外一个字符串的结尾,那么打印出0,如果不属于打印出1

我的思路是这样的:计算出2个字符串长度,然后把2个指针都指向字符串的最后一个字符,然后反对比,指针往前走。

#include<stdio.h>
main()
{
        char *s ="hellohello";
        char *t ="hello";
        int i = 0;
        int j = 0;
        int k = 0;
        while(*s != '\0')
        {
                ++s;
                i++;
        }
        while(*t != '\0')
        {
                ++t;
                j++;
        }
       
        for( ;t[j-1] == s[i-1]; )
        {
                --j;
                --i;
                if(j == 0)
                {
                       
                  printf("0");
                return 0;
                }
        }
        printf("1");
        return 1;
       
}

我觉得上面的可以,但是总是出不来正确结果。

论坛徽章:
0
2 [报告]
发表于 2009-04-30 06:52 |只看该作者
不能用 strlen 和 strcmp 吗?

论坛徽章:
1
技术图书徽章
日期:2014-03-06 15:29:50
3 [报告]
发表于 2009-04-30 08:46 |只看该作者
前两个while已经使得s和t走到结尾了,后面再用s[j-1],自然不对了

论坛徽章:
0
4 [报告]
发表于 2009-04-30 09:21 |只看该作者

回复 #3 qshllxfx 的帖子

很明显。不要地址和游标同时走:

  1. #include<stdio.h>
  2. main()
  3. {
  4.         char *s ="hellohello";
  5.         char *t ="hello";
  6.         int i = 0;
  7.         int j = 0;
  8.         while(s[i] != '\0')
  9.         {
  10.                 ++i;
  11.         }
  12.         while(t[j] != '\0')
  13.         {
  14.                 ++j;
  15.         }
  16.    
  17.         for( ;s[i-1] == t[j-1]; )
  18.         {
  19.                 --j;
  20.                 --i;
  21.                 if(j == 0 || i == 0)
  22.                 {
  23.    
  24.                   printf("0");
  25.                   return 0;
  26.                 }
  27.         }
  28.         printf("1");
  29.         return 1;
  30.    
  31. }
复制代码

论坛徽章:
0
5 [报告]
发表于 2009-04-30 12:27 |只看该作者
t和s不应该改变
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP