更正一下,是调用 strlen(string)+1 次
for(i=0;i<strlen(string);i++)你可能以为这里的strlen(string)只调用了一次,但实际上是调用了strlen(string)+1次,对于一个小程式可能是没多大影响,但如果在大的程序中多次调用fun或者你有多个类似的for(;;)影响就大了.而可能会造成错误(当string指针在for()被移动,就会有错误的结果)。
受教了!
[此贴子已经被作者于2004-10-02 20:16:30编辑过]
knocker:还有,空前的第二个程序不能正确处理汉字,并且还应考虑汉字与ASCII混合使用的情况。
改一下:
#include<string.h>
int fun(char *string,char *str) {int i,j,k,n=0; int a=strlen(string),b=strlen(str); for(i=0;i<a;i++) {k=i; for(j=0;j<b;j++) if(*(string+k)==*(str+j)) {k++;continue;} else break; if(j>=strlen(str)) { n++;i=k-1;} } return n; }
这样应该可以了吧,我也想了一下上面的那个函数还不能处理这样的字符串:
fun("aaa","aa")
如果是这样的话就变成2了,改了之后应该没问题吧!
knocker:还有,空前的第二个程序不能正确处理汉字,并且还应考虑汉字与ASCII混合使用的情况。
改一下:
#include<string.h>
int fun(char *string,char *str) {int i,j,k,n=0; int a=strlen(string),b=strlen(str); for(i=0;i<a;i++) {k=i; for(j=0;j<b;j++) if(*(string+k)==*(str+j)) {k++;continue;} else break; if(j>=strlen(str)) { n++;i=k-1;} } return n; }
这样应该可以了吧,我也想了一下上面的那个函数还不能处理这样的字符串:
fun("aaa","aa")
如果是这样的话就变成2了,改了之后应该没问题吧!
觉得应该是i=k-b