标题:偷C++的题
只看楼主
空前
Rank: 1
等 级:新手上路
帖 子:1146
专家分:0
注 册:2004-5-11
得分: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编辑过]


2004-10-02 20:14
空前
Rank: 1
等 级:新手上路
帖 子:1146
专家分:0
注 册:2004-5-11
得分:0 

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了,改了之后应该没问题吧!


2004-10-02 20:23
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
得分:0 

你测试一下下面的数据:

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


九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2004-10-02 20:33
空前
Rank: 1
等 级:新手上路
帖 子:1146
专家分:0
注 册:2004-5-11
得分:0 

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

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


2004-10-02 20:39
空前
Rank: 1
等 级:新手上路
帖 子:1146
专家分:0
注 册:2004-5-11
得分:0 
我不会处理汉字,你写一个我看看!

2004-10-02 21:46
bcomer
Rank: 1
等 级:新手上路
帖 子:113
专家分:0
注 册:2004-9-13
得分:0 
以下是引用空前在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

2004-10-03 10:30
空前
Rank: 1
等 级:新手上路
帖 子:1146
专家分:0
注 册:2004-5-11
得分:0 
如果是k-b,那就不需要这一步了!

2004-10-04 20:22
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
得分:0 

补充一点汉字编码的知识

GB2313-80标准

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

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


九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2004-10-05 00:21
bcomer
Rank: 1
等 级:新手上路
帖 子:113
专家分:0
注 册:2004-9-13
得分:0 
以下是引用空前在2004-10-04 20:22:01的发言: 如果是k-b,那就不需要这一步了!

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

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

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

2004-10-05 14:51
longhao
Rank: 1
等 级:新手上路
帖 子:68
专家分:0
注 册:2004-9-10
得分:0 

有个问题,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;

}


携手共进,陪伴彼此~
2004-10-05 20:44



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-5946-1-1.html




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

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