| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1662 人关注过本帖
标题:偷C++的题
取消只看楼主 加入收藏
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
结帖率:92.86%
收藏
 问题点数:0 回复次数:5 
偷C++的题

刚才到C++版,看了看,KAI版主出了两道题,C++没人做(不知道是不会还是不愿),

转来大家试试:

一,函数篇 (比较简单,仅提两个问题而已)

问题一: 编写一个程序判定一个字符在一个字符串中出现的次数,如果该字符不出现则返回值 0。

问题二: 编写一个程序判定一个子串在一个字符串中出现的次数,如果该子串不出现则返回值0。

我加上两条件:

1。第一个问题,写成子函数形式:int fun(char *string,char c)

2。第二个问题,写成子函数形式且要能处理汉字:int fun(char *string,char * str)

关于第二个问题的测试数据(如有新的,我会加上,大家也可以跟贴加上):

补充一点汉字编码的知识

GB2313-80标准

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

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

1。 char *string="中华人民共和国"; char *str="凸"; 2。 char *string="安綿是什么意思?";

char *str='d'; or *str="匆";

三天后我贴上我的代码。

[此贴子已经被作者于2004-10-08 20:10:28编辑过]

搜索更多相关主题的帖子: 字符 fun int char 
2004-10-02 00:35
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 

程序的效率永远是第一位!

for(i=0;i<strlen(string);i++)在for()中使用strlen作为条件判定是错误的用法,这意味着你的程序将调用strlen(string)模块 i 次。

下面的程序能充分说明这一点:

#include<string.h> #include <stdio.h> #include <dos.h> #include <time.h> /*int fun(char *string,char c) { int i,n=0; for(i=0;i<strlen(string);i++) if(*(string+i)==c) n++; return n; } */ /*int fun(char *string,char c) { int n=0; while(*string)if(*string++==c)n++; return n; } */

/*更换不同fun,看看效率*/ int fun(char *string,char c) { int i,n=0,j; j= strlen(string); for(i=0;i<j;i++) if(*(string+i)==c) n++; return n; }

void main() { char *str="werweqhfjklsdfhdskljghsdlf;ghjeiurtyhiusfdkjghdskghfdgdsg",c='h'; int i,j; time_t first, second;

first = time(NULL);

for(j=0;j<10;j++)for(i=0;i<10000;i++)fun(str,c);

second = time(NULL);

printf("The difference is: %f seconds\n",difftime(second,first)); }

还有,空前的第二个程序不能正确处理汉字,并且还应考虑汉字与ASCII混合使用的情况。


九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2004-10-02 09:09
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 

更正一下,是调用 strlen(string)+1 次

for(i=0;i<strlen(string);i++)你可能以为这里的strlen(string)只调用了一次,但实际上是调用了strlen(string)+1次,对于一个小程式可能是没多大影响,但如果在大的程序中多次调用fun或者你有多个类似的for(;;)影响就大了.而可能会造成错误(当string指针在for()被移动,就会有错误的结果)。

[此贴子已经被作者于2004-10-02 09:55:53编辑过]


九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2004-10-02 09:51
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 

你测试一下下面的数据:

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


九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2004-10-02 20:33
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 

补充一点汉字编码的知识

GB2313-80标准

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

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


九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2004-10-05 00:21
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 

晕,还没有人做第二题??

难道C真是如此没落?重赏!!!!!!

完成第二题并通过测试的重赏!!!


九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2004-10-08 20:04
快速回复:偷C++的题
数据加载中...
 
   



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

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