请使用“答题”菜单或使用VC6打开考生文件夹proj3下的工程proj3,其中声明了MyString类。MyString是一个用于表示字符串的类。成员函数startsWith的功能是判断此字符串是否以指定的前缀开始,其参数s用于指定前缀字符串。如果参数s表示的字符串是MyString对象表示的字符串的前缀,则返回true;否则返回false。注意,如果参数s是空字符串或等于MyString对象表示的字符串,则结果为true。
例如:字符串"abc"是字符串"abcde"的前缀,而字符串"abd"不是字符串"abcde"的前缀。请编写成员函数startsWith。在main函数中给出了一组测试数据,此情况下程序的输出应该是:
s1=abcde
s2=abc
s3=abd
s4=
s5=abcde
s6=abcdef
s1 startsWith s2:true
s1 startsWith s3 false
s1 startsWith s4 true
s1 startsWith s5 f true
s1 startsWith s6 false
要求:补充编制的内容写在//********333********//********666********两行之间,不得修改程序的其他部分。
注意:程序最后已经将结果输出到文件out.dat中。输出函数writeToFile已经编译为obj文件,并且在本程序中调用。
//源程序
#include"MyString.h"
bool MyString::startsWith(const char*s)const
//********333********
//********666********
int main()
char s1[]="abcde";
char s2[]="abc";
char s3[]="abd";
char s4[]=" ";
char s5[]="abcde";
char s6[]="abcdef";
MyString str(s1);
cout<<"s1="<<s1<<endl<<"s2="<<s2<<endl<<"s3="<<s3<<endl
<<"s4="<<s4<<endl<<"s5="<<s5<<endl<<"s6="<<s6<<endl:
cout<<boolalpha<<"s1 startsWith s2:"<<str.startsWith(s2)<<endl
<<"s1 startsWith s3:"<<str.startsWith(s3)<<endl
<<"s1 startsWith s4:"<<str.startsWith(s4)<<endl
<<"s1 startsWith s5:"<<str.startsWith(s5)<<endl
<<"s1 startsWith s6:"<<str.startsWith(s6)<<endl;
//writeToFile("K:\\b10\\61000101\\");
return 0:
参考答案://********333********
if(s==NULL) return true;
else
for(int i=0;i<strlen(s);i++)if(str[i]!=s[i])return false;
return true:
//********666********
解析: 首先判断s是否为空,如果是,直接返回为真;否则,以s的长度,采用倒数的办法,从最后一个元素开始依次比较s的元素同str的元素是否相等,如果不相等则直接返回false,直到比较完,返回为true。注意下标二者分别为size-1-1和strlen(s)-i-1。