新加坡程序员考题一则及分析

2016-01-29 12:20 6 1 收藏

新加坡程序员考题一则及分析,新加坡程序员考题一则及分析

【 tulaoshi.com - C语言心得技巧 】

新加坡程序员考题一则及分析
作者: 孙玉玮

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)

考题原文:

Problem statement

You must work out a super string class, String, that is derived from the C++ standard class string. This derived String class must add two new member functions

1; a pattern recognition function that returns the number of occurrences of a string pattern in a string. This function must use operator overloading of the / (division) operator.
2; a function get_token that returns tokens extracted from the string

A token is a substring occurring between space characters in the string or between space characters and the end of the string. The string " aaa bbb cc " has the tokens "aaa", "bbb", and "cc" . When the function is called the first time, it must return "aaa", the next time "bbb", and then "cc". When it is called the 4th time it must return an empty string, and when it is called the 5th time it starts all over returning "aaa". Optionally, you may extend the solution so that tokens may be separated by any character out of a set of character given as a string argument.

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com) 参考译文:

问题描述:

你必须创建一个功能强大的串处理类,String,这个类必须从 C++ 中标准的 string 类派生,必须在该派生类中添加两个成员函数:
1、模式识别函数,返回某个串中指定串模式的出现次数。该函数必须使用 / (除法)运算符重载。
2、用函数 get_token 从串中吸取某个记号并返回该记号。

记号指字符串的一个子串,它位于字符串的空格之间,或者位于空格和串尾之间。如:字符串“ aaa bbb cc ”中的记号有“aaa”、“bbb”和“cc”。当第一次调用该函数时,它必须返回“aaa”,下次再调用时返回“bbb”,第三次调用时返回“cc”,依此类推。当第四次调用该函数时,它必须返回一个空串,最后当第五次调用它时,返回结果又从 “aaa” 开始。你可以随意扩展这个解决方案,让记号可以用某组字符以外的任何字符分割,这组字符可以作为一个串参数传递。

算法分析(写成代码):
int CMyString::operator/ (const String& sub){  if(sub.IsEmpty())       return 0;  int count=0;//sub在字符串中的出现次数count  int ret=Find(sub);//辅助变量ret  if(ret==-1)     return 0;  else if(ret<=GetLength())  {do          count++;          ret=Find(sub,GetAt(ret));}       while(ret!=-1)     }   return count;}CString CMyString::get_token(){    static int callednum=0;//callednum纪录该函数的被调用次数   int totalnum=operator/('' '');//totalnum是空格的总个数   if(totalnum==0)       return NULL;   int tokennum,ret1=0,ret2=0;//tokennum是的token的总个数   while((ret1=Find('' '',ret2))!=-1 &&((ret2=Find('' '',ret1))!=-1)   {      if(ret1==ret2-1)        totalnum--;//两个相邻的空格算作一个      return  Mid(ret1,ret2-ret1);   }   if(ret2==-1)      return Right(GetLength()-ret1);    tokennum=totalnum;   (callednum++)%=tokennum;} 
声明:这只是粗糙的算法,要想真正实现指定功能,可能细节需要修改!希望对MFC的初学者有所帮助!

来源:http://www.tulaoshi.com/n/20160129/1485659.html

延伸阅读
标签: Java JAVA基础
  在网上看到很多问题是关于如何学习jsp的,正好网上看到一篇关于学习jsp的文章,就摘了一部分翻译过来,希望能对大家学习jsp有点指 导。 一个普通的错误是把JSP当作简化的 Java。它不是,(事实上, JSP 是简化的 servlets 。)程序员通常试着没有学习要求的支持技巧而 直接学习 JSP 。JSP 是一个衔接技术,并且成功地连接你需要理解...
一、设窗体上有若干个以Command1命名的命令按钮,现要求:点击其中一个按钮后,该按钮不可用,而其它的按钮均可用。以下几行代码可以实现这个要求,比一个一个的设置高效得多。其实,我也是看了土人的关于控件数组的一文后,认为我的方法更加简单,代码更简易。 以下是实现的代码: PrivateSubCommand1_Click(IndexAsInteger) ...
标签: Web开发
本文讨论的是在web标准普及的形势下,网站程序员的定位以及如何与设计师配合开发符合web标准的网站项目。 本文适合的读者是传统TABLE布局下分工不是非常明晰的程序员。 1:学习web标准,让你的工作变得更加简单。 web标准是大势所趋,所以作为网站程序员。你必须洗脑,必须去学习web标准。去重新认识html标签,去了解如何...
我觉得“做其他的工作,35岁是事业蒸蒸日上,做软件35岁就失业 ”是今天Bird说的一句非常错误的话。真的。 大家千万不要受这种话影响,也不要散布这样的话。否则也许断送不了自己,但是有可能断送中国软件业的将来。 我觉着可以试试讨论,35岁以后,软件人员应该怎样转型而不是消极的谈失业,也太颓废了吧!
标签: Web开发
本程序最初是由wanghr100(灰豆宝宝.net)的checkForm基础上进行修改的,增加了很多功能,如下: 对非ie的支持 增加了内置表达式和内置提示 增加了显示方式(弹出式和页面显示式) 增加了显示一条和显示全部 进行了封装(CLASS_CHECK) 支持外接函数或表达式(应用在密码一致) 简化了调用方式,所有操作只需要script language='javascript' src='c...

经验教程

273

收藏

38
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部