当前位置: 代码迷 >> C语言 >> 偷C++的题
  详细解决方案

偷C++的题

热度:258   发布时间:2004-10-02 20:14:00.0
以下是引用knocker在2004-10-02 09:51:07的发言:

更正一下,是调用 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了,改了之后应该没问题吧!


----------------解决方案--------------------------------------------------------

你测试一下下面的数据:

char *string="中华人民共和国"; char *str="凸";


----------------解决方案--------------------------------------------------------

好我来试试,不过我把上面的代码用什么保存到TC目录下啊,

我用记事本保存,到TC里面用load连接不上?


----------------解决方案--------------------------------------------------------
我不会处理汉字,你写一个我看看!
----------------解决方案--------------------------------------------------------
以下是引用空前在2004-10-02 20:23:07的发言:

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


----------------解决方案--------------------------------------------------------
如果是k-b,那就不需要这一步了!
----------------解决方案--------------------------------------------------------

补充一点汉字编码的知识

GB2313-80标准

1。汉字有两个字节组成:

2。第一个字节等于该汉字的区码加0xa0;第二个字节等于该汉字的位码加0xa0;


----------------解决方案--------------------------------------------------------
以下是引用空前在2004-10-04 20:22:01的发言: 如果是k-b,那就不需要这一步了!

不好意思,我理解错了,我以为是模式匹配,

要是"AAA" "AA"输出1的话 应该是K-1;

"AAA" "AA"输出2的话 是K-B或不写


----------------解决方案--------------------------------------------------------

有个问题,string 是个指针, 不是个常量吗???指向第一个元素所存放的地址,没错吧?

那怎么可以用strlen(string)这样的形式吗??

我写了如下程序,大家指教一下:

int fun(char *string, char c)

{int n=0;

char * pf;

pf=string;

while(*pf!=null)

{ if(*pf==c){n++;pf++)

else pf++;

}

return n;

}


----------------解决方案--------------------------------------------------------
  相关解决方案