- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
?
?
课程实践报告
?
?
?
?
设计题目: 程序设计实践(VC++)
设计时间 至 2015-3-13
学院(系): 学院
专业班级:
学生姓名: 学号
指导老师:
?
任务
一、实践任务9.定义一个字符串类CString,并设计一个算法对该串中各个不同字符出现的频率进行统计。
二、详细设计
1、类的描述与定义
(1)私有数据成员
??char *str:指向要统计的字符串。
??char (*p)[2]:动态分配二维空间,用以存放str所指字符串中出现的字符及其出现的次数(次数在存放时,用该数字对应的ASCII值存放;在输出次数时,输出该ASCII字符对应的ASCII值即可)。
??int size:存放字符串中出现的所有不同的字符的个数。
(2)公有成员函数
??CString (char *s) :根据s参数初始化数据成员str;p和size初始值为0。
??void Count():p根据s所指字符串长度分配空间。然后把str所指字符串中的每个字符放入p数组中,设置每个字符的出现次数为1。根据p数组统计不同字符出现的频率,并求得size的实际大小。最后根据size的实际大小,重新分配p所指空间,并把不同字符及其出现次数重新放回p数组(提示:可以借助临时数组或指针来实现)。
??void Show():屏幕显示字符串、字符串的每个字符和与之对应的次数。
??~CString():释放动态分配的空间。
2、主要函数设计
在主程序中定义字符串char s[]=”abdabcdesffffd”。定义一个CString类对象test,用s以初始化test,完成对该类的测试。源程序清单
#includeiostream.h
#includestring.h
class CString{
private:
char*str;
char (*p)[2];
int size;
public:
CString(char*s)
{
str=new char[strlen(s)+1];
strcpy(str,s);
size=0;
p=0;
}
void Count();
void Show();
~CString()
{ if(str) delete str;}
};
void CString::Count()
{
p=new char[strlen(str)][2];
int i,j,k;
for(i=0,j=0;istrlen(str);i++)
{
p[i][j]=str[i];
p[i][j+1]=1;
}
char*part1=new char[strlen(str)+1];
int*part2=new int[strlen(str)+1];
for(i=0;istrlen(str);i++)
{
part1[i]=\0;
}
for(i=0;istrlen(str);i++)
{
part2[i]=0;
}
for(i=0;istrlen(str);i++)
{
for(j=i;jstrlen(str);j++)
{
int count;
for(k=0,count=0;ksize;k++)
{
if(part1[k]==p[i][0])count++;
}
if(count==1) break;
else {
part1[size]=p[i][0];
size++;
}
}
}
for(k=0;ksize;k++)
{
for(i=0;istrlen(str);i++)
{
if(part1[k]==p[i][0])
{
part2[k]++;
}
}
}
delete []p;
p=new char[size][2];
for(i=0;isize;i++)
{
p[i][0]=part1[i];
p[i][1]=part2[i];
}
delete []part1;
delete []part2;
}
void CString::Show()
{
cout原字符串为:strendl;
cout不同的字符数:sizeendl;
cout字符串中的每个字符为:endl;
for(int i=0;isize;i++)
coutp[i][0] 次数(int)p[i][1]endl;
}
void
文档评论(0)