猎豹移动(金山网络)2015校园招聘(c++project师)
1.已知类MyString的原型为:
class MyString{
public: MyString(const char *str=NULL);//普通构造函数
MyString(const MyString);//拷贝构造函数
~MyString(void);//析构函数
MyString&operator=(const MyString);//赋值构造函数
private:char *m_c_data;//用于保存字符串
};请编写MyString的上述4个函数。
程序猿面试宝典p112
class MyString { public: MyString(const char *str=NULL);//普通构造函数 MyString(const MyString &other);//拷贝构造函数 ~MyString(void);//析构函数 MyString&operator=(const MyString &other);//赋值构造函数 private: char *m_data;//用于保存字符串 }; MyString::MyString(const char *str)//构造函数 { if(str==NULL) { m_data=new char[1]; *m_data='\0'; } else { int length=strlen(str); m_data=new char[length+1]; strcpy(m_data,str); } } MyString::~MyString(void)//析构函数 { delete [] m_data;//因为m_data是内部数据类型,也能够写出delete m_data; } MyString::MyString(const MyString &other)//拷贝构造函数 { int length=strlen(other.m_data); m_data=new char[length+1]; strcpy(m_data,other.m_data); } MyString&MyString::operator=(const MyString &other)//赋值函数 { if(this==&other)//检查自赋值 return *this; delete [] m_data;//释放原有的内存资源 int length=strlen(other.m_data);//分配新的内存资源,并复制内容 m_data=new char[length+1]; strcpy(m_data,other.m_data); return *this;//返回本对象的引用 }
2.请将两个数据序列合并成一个有序并无同样元素的数据。 如s1[5]={23,14,62,57,24},s2[5]={14,19,10,14,25}
运行后输出10,14,19,23,24,25,57,62
注:不能够使用库函数
#include<iostream> using namespace std; int main() { int s1[5]={23,14,62,57,24},s2[5]={14,19,10,14,25}; int s3[10],i,j,k,t;int flag; s3[0]=s1[0]; k=1; for(i=1;i<5;i++) { flag=1; for(j=0;j<k;j++) { if(s1[i]==s3[j]) { flag=0;break; } } if(flag==1) s3[k++]=s1[i]; } for(i=0;i<5;i++) { flag=1; for(j=0;j<k;j++) { if(s2[i]==s3[j]) { flag=0;break; } } if(flag==1) s3[k++]=s2[i]; } for(i=0;i<k-1;i++) { for(j=0;j<k-1-i;j++) { if(s3[j]>s3[j+1]) { t=s3[j];s3[j]=s3[j+1];s3[j+1]=t; } } } for(i=0;i<k;i++) { cout<<s3[i]<<" "; } return 0; }
3.打印一个N*N的方阵。N为每边字符的个数(3<N<20),要求最外层为“A”,第二层为“B”。从第三层起每层依次打印数字0,1,2,3,……样例:当N=5。打印出以下的图形
AAAAA
ABBBA
AB0BA
ABBBA
AAAAA
#include<cstring> #include<iostream> using namespace std; int main() { int N; int i,j,k,m;char a[20][20]; cin>>N; for(i=0;i<(N+1)/2;i++) { if(i==0) { for(j=0;j<N;j++) a[j][i]=a[i][j]=a[j][N-i-1]=a[N-i-1][j]='A'; } else if(i==1) { for(j=1;j<N-i;j++) a[j][i]=a[i][j]=a[N-i-1][j]=a[j][N-i-1]='B'; } else { for(j=i;j<N-i;j++) a[j][i]=a[i][j]=a[N-i-1][j]=a[j][N-i-1]=i-2+'0'; } } for(i=0;i<N;i++) { for(j=0;j<N;j++) { cout<<a[i][j]<<" "; } cout<<endl; } return 0; }
纸上敲代码。都没写对~有的时候真是快崩溃,找不到工作的忧伤~谁能懂