论坛: 编程破解 标题: 帮我看一下吧!编一个strcp()函数,它的作用和标准函数strcmp()一样 复制本贴地址    
作者: yuanrulai [yuanrulai]    论坛用户   登录
/*编一个strcp()函数,它的作用和标准函数strcmp()一样*/
/*我用的是tc for windows ――-win-tc*/
#include"stdio.h"
int strcp(char *stra,char *strb)
{
  char cha,chb;
  int i,num=0; /*num为stra与strb之间的差值*/
  for(i=0;(cha=stra[i])!='\0'||(chb=strb[i])!='\0';i++)  /*当找到不同字符或者两个*/
      if(cha!=chb){                                  /*字符串都到了末尾时结束循环*/
      printf("chb is %d\n",chb);/*这句是我加上去检测用的,我不明白,*/
      num=cha-chb;            /*怎么每次chb都自动变成了ASCII值为8的字符了呢?,*/
      break;  /*找到不相同字符求出它们之间的差值退出循环*/
    }
  return num;
}
void main()
{
  char str1[20],str2[20];
  gets(str1);
  gets(str2);
  printf("%d,%d\n",strcp(str1,str2),strcmp(str1,str2));  /*用来与标准函数对照的*/
  getch();/*我用的是windows xp系统,加上这句是为了防止程序执行完毕后自动关毕*/
}



[此贴被 排山倒海(yuanrulai) 在 05月13日19时20分 编辑过]


[此贴被 286(unique) 在 05月14日09时05分 编辑过]

地主 发表时间: 04-05-13 17:39

回复: lida1818 [lida1818]   论坛用户   登录
for(i=0;(cha=stra[i])!='\0'||(chb=strb[i])!='\0';i++) 



这句,  ||  与  && 区别

用||后面的 chb=strb[i]得不到执行,被跳过了

B1层 发表时间: 04-05-13 19:17

回复: yuanrulai [yuanrulai]   论坛用户   登录
为什么会这样呢?
为什么会跳过呢?
而chb为什么就会是等于8呢?
如果不用||的话那就达不到我的目的了
希望能指教一下

B2层 发表时间: 04-05-13 19:23

回复: yuanrulai [yuanrulai]   论坛用户   登录
如果这里不用||
而用&&的话那就会出现一些小问题
如输入
abcdefg
abc
它会认为这两个字符串是相等的

B3层 发表时间: 04-05-13 19:27

回复: lida1818 [lida1818]   论坛用户   登录
你用||就没有问题了吗?

||是逻辑或,只要前一个条件为真,系统就不再计算下一个语句的逻辑值。所以chb=strb[i]就得不到执行.至于chb为什么会是8,这个与机器有关,不同的机器上,值是不同的。一句话,是个不确定的值。


#include"stdio.h"
int strcp(char *stra,char *strb)
{
  while(*stra!='\0'&&*strb!='\0')if(*stra!=*strb)return (int)*stra-(int)*strb;
  else stra++,strb++;
  if (*stra=='\0')return 0-(int)*strb;
  if (*strb=='\0')return (int)*stra;

}
void main()
{
  char str1[20],str2[20];
  gets(str1);
  gets(str2);
  printf("%d,%d\n",strcp(str1,str2),strcmp(str1,str2));
  getch();
}

用for 也一样,加两个if 判断一下


B4层 发表时间: 04-05-13 20:31

回复: yuanrulai [yuanrulai]   论坛用户   登录
非常感谢!

B5层 发表时间: 04-05-13 20:46

回复: fool [cike]   论坛用户   登录
刚学c,呵呵
终于算是看的懂一些了
谢谢烟雨平生

[此贴被 fool(cike) 在 05月15日22时01分 编辑过]

B6层 发表时间: 04-05-15 22:00

回复: yuanrulai [yuanrulai]   论坛用户   登录
其实我这算法是对的
就算||有这个性质的话
也可以在|| 之外赋值



B7层 发表时间: 04-05-23 20:10

论坛: 编程破解

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号