持续更新中,所以暂时比较乱,敬请谅解!
1.实现一个类,该类不可以被继承,同时该类只可以定义有限个对象
在C++ 中没有final 这个关键字,要实现这个要求还是需要花费一些精力。首先想到的是在C++ 中,子类的构造函数会自动调用父类的构造函数。同样,子类的析构函数也会自
动调用父类的析构函数。要想一个类不能被继承,我们只要把它的构造函数和析构函数都定义为私有函数。
#include<iostream>
using namespace std;
class FinalClass1
{
public :
static int count ;//实例化次数
static FinalClass1* GetInstance()
{
if(count<=0)
return NULL;
count--;
return new FinalClass1;
}
static void setCount(int n)
{
count = n;
}
static void DeleteInstance( FinalClass1* pInstance)
{
delete pInstance;
pInstance = 0;
}
private :
FinalClass1()
{
cout<<"con"<<endl;
}
~FinalClass1()
{
cout<<"decon"<<endl;
}
};
int FinalClass1::count=0;
void main()
{
FinalClass1::setCount(3);
FinalClass1 *f1 = FinalClass1::GetInstance();
FinalClass1 *f2 = FinalClass1::GetInstance();
FinalClass1 *f3 = FinalClass1::GetInstance();
if (f3==NULL)
{
printf("f3 NULL\n");
}
else
{
printf("f3 Not NULL\n");
}
FinalClass1::DeleteInstance(f3);
FinalClass1 *f4 = FinalClass1::GetInstance();
if (f4==NULL)
{
printf("f4 NULL\n");
}
FinalClass1 *f5 = FinalClass1::GetInstance();
if (f5==NULL)
{
printf("f5 NULL\n");
}
}
结果:这个好好解释必须看专业书籍啊,待回看。

2.实现字符串中空格的去除,不能用系统函数现在只能想到比较常规的方法,见:http://wenku.baidu.com/view/60fa79380912a216147929a1.html
3.实现字节的逆序 现在只能想到比较常规的方法,更好的方法见:http://log4think.com/reverse_byte_bit/?replytocom=24
4.求两个时间的时间差,不能用系统函数。
类似的poj--acm题,见:http://blog.csdn.net/dscyw/article/details/8766968本题的参考程序也在其中。
5.请不用任何c runtime函数实现以下函数:Inter trim_str(char *pstr)
函数功能如下:
1) 滤掉字符串头尾的空格、回车、tab
2) 输出字符串通过输入字符串指针返回
3) 如果成功则返回0否则返回非0
参考程序如下:回车和题目要求的返回值问题我没有处理好,以后完善。
#include<iostream>
using namespace std;
int trim_str(char *pstr)
{
int beg=0,end=0,i=0;
while(pstr[i]==' ' || pstr[i]==13 || pstr[i]=='\t')
i++;
beg=i;
while(pstr[i]!='\0') i++;
while(pstr[i]==' ' && pstr[i]==13 && pstr[i]=='\t')
i--;
end=i;
cout<<beg<<endl<<end<<endl;
for(i=0;i<=end-1-beg;i++)
{
pstr[i]=pstr[i+beg];
}
pstr[i]='\0';
return 0;
}
int main(void)
{
char strTemp[]=" I absolutely Love China ";
char *str=strTemp;//必须这样处理下,奥妙见:http://blog.csdn.net/dscyw/article/details/8759438
if(!trim_str(str)) cout<<str<<endl;
return 1;
}
运行结果:
6.有N个大小不等的自然数(1,2,3,…..N)请将它们从小到大排列。算法要求:时间复杂度为O(n),空间复杂度为O(1)。
请简要说明你采用的排序算法并写出c的伪代码。
本题用快速排序算法,排序算法有必要复习下了,见:http://blog.csdn.net/dscyw/article/details/8763754
7.裴波那絜数列的形式如下: 1 1 2 3 5 8 13……. n,编写一个函数计算数列中第n个元素的值。
参考程序:
int Fibonax(int n)
{
if(n==1 || n==2)
return 1;
else
return Fibonax(n-1)+Fibonax(n-2);
}
int main()
{
cout<<Fibonax(9)<<endl;
return 1;
}
8.不调用任何系统函数,实现在一个字符串中查找子串的函数,如果包含子串,则返回该子串的位置值。(7分)
参考程序如下:
#include<iostream>
#include<cstring>
using namespace std;
int GetCommon(char *s1, char *s2)
{
int loca;
int len1 = strlen(s1);
int len2 = strlen(s2);
for(int i = 0; i < len1; i++)
{
if(s1[i] == s2[0])
{
int as = i, bs = 0, count = 1;
while(as + 1 < len1 && bs+ 1 < len2 && s1[++as] == s2[++bs])
count++;
if(count == len2)
{
loca = i;
return loca;
}
}
}
}
int main(void)
{
char *str1="I absolutely Love China";
char *str2="Love";
cout<<GetCommon(str1,str2)<<endl;
return 1;
}
运行结果:

9.用算法实现将一个输入的数字颠倒,要求不调用任何系统函数,也不能将输入数字转换为字符串作为中间过渡。(8分)
方法1:(字符数组,借鉴)
#include <stdio.h>
#include <string.h>
#include <dos.h>
int main()
{
charstr[] = "ABCD1234efgh";
intlength = strlen(str);
char* p1 = str;
char* p2 = str + length - 1;
while(p1< p2)
{
char c = *p1;
*p1 = *p2;
*p2 = c;
++p1;
--p2;
}
printf("strnow is %s\n",str);
system("pause");
return0;
}
方法2:递归或栈
void reverse()
{
stack s;
int x;
while (cin>>x)
{
s.push(x);
}
while (!s.empty())
{
x = s.pop();
cout<<x;
}
}
本文详细介绍了如何在C++中创建一个不可继承的类,并实现了特定的功能,包括实例计数、构造与析构过程的私有化,以及如何通过静态方法管理类实例。此外,还提供了字符串处理、字节逆序、时间差计算、字符串裁剪、自然数排序及裴波那契数列计算等实用示例。

559

被折叠的 条评论
为什么被折叠?



