| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 925 人关注过本帖
标题:小菜一碟给大家...
只看楼主 加入收藏
死了都要C
Rank: 4
来 自:四川成都
等 级:贵宾
威 望:13
帖 子:1582
专家分:116
注 册:2006-12-7
收藏
得分:0 
for(i=0,j=0;s[i];++i)
{
while( (j<k) && (s[i]) )
s[i++]^=m[j++];
if(!s[i])break;
}


LZ看看``这样可以吗```我觉得我3楼改得还不怎么好```没有控制好外层循环```现在应该完全可以了``


女施主``我给你``送茶来了```师太``你就从了老衲吧``
代码本天成~~~妙头偶得之```
2007-09-20 08:58
喜雨
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2007-6-30
收藏
得分:0 
for(i=0,j=0;s[i];++i)
{
while( (j<k) && (s[i]) )
s[i++]^=m[j++];
if(!s[i])break;
}
哥们你说得对,3楼的break语句只能跳出内层循环,因为break只能跳出一层嘛。
本来是不用改的,我已经解释过了,因为没有对\0字符加密,所以\0以后的操作实际上是无效的。
但是当然这样来说程序的效率就不高了。。
如果要改的话,就要在这里入手了。。。

但是对于兄弟上面的程序,我还是有点不明白:
初始化i=0,j=0;然后进行,while( (j<k) && (s[i]) )
s[i++]^=m[j++];
但是进行到j=k-1(即最后一次)i++,使得,i加了1,同样j也加了1,此时j=k.(当然这里的被加密的串比密码串长,也就是i>k的)所以还不至于s[i]=='\0'..
然的就不明了,,,,
到这里为此,内层完了一次了,,,,转到外面去,于是又要执行外层的i++,然后就使得中间必有一个字符会被跳过,是不是?
而且对于for语句来说,第二次不会再次执行i=0,j=0这一条的,因而j就无法归0
后面就都无法进行了。。。


大概就这些地方不太明白,,,
很久没有这么细致的分析过问题了,,,,,和楼上的哥们这一次交流,真是长了不少知识,,,这个朋友交定了。。
My QQ:715403491,麻烦加一下。。。



2007-09-20 13:22
喜雨
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2007-6-30
收藏
得分:0 

哥们,如果要提高效率,改一下,我倒是有一招,break跳不出,用goto...
如下,,,
for(i=0;i<40;i+=k)
for(j=0;j<k;j++)
{
if(s[i+j]!='\0')
s[i+j]=s[i+j]^m[j];
else
goto laber;
}
laber:;//注:这里的;不能少,表示一个空语句。。。
我跟踪进去过了,行得通的,到s[i+j]='\0'时,会自动跳出两层循环的。。。

2007-09-20 13:32
快速回复:小菜一碟给大家...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023247 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved