C++课程设计String类
如何用c语言实现CString的构造函数、析构函数和赋值函数?
如何⽤c语⾔实现CString的构造函数、析构函数和赋值函数?编写类String的构造函数、析构函数和赋值函数已知类String的原型为:class String{public:String(const char*str=NULL);//普通构造函数String(const String&other); //拷贝构造函数~String(void); //构析函数String&operate=(const String&other); //赋值函数Private:Char *m_data; //⽤于保存字符串};请编写String的上述4个函数。
String::String(const char*str=NULL){if(str == NULL){Init();return ;}int nLen = SafeStrlen(str) + 1;if (nLen != 1){m_data = new char[nLen];memset(m_data, 0, nLen);memcpy(m_data, lpsz, nLen*sizeof(char));}else Init();}String::String(const String&other){int len = SafeStrlen(other.m_data) + 1;m_data = new char[len];memset(m_data, 0, len);memcpy(m_data, other.m_data, len);}String::~String()// free any attached data{if(m_data)delete []m_data;}const String& String::operator=(const String& other){char* pOldData = m_data;int len = SafeStrlen(other.m_data) + 1;if( len != 1 ){m_data = new char[len];memset(m_data, 0, len);memcpy(m_data, other.m_data, len);if(pOldData) delete[]pOldData;return *this;}if(pOldData) delete[]pOldData;Init();return *this;}void String::Init(){m_data = new char[1];*m_data = '/0';}int String::SafeStrlen(LPCTSTR lpsz){return (lpsz == NULL) ? 0 : strlen(lpsz); }。
c有关字符串课程设计
c 有关字符串课程设计一、教学目标本章节的教学目标是让学生掌握C语言中关于字符串的基本概念、操作和应用。
具体包括:1.知识目标:–理解字符串的概念及其在C语言中的表示;–掌握字符串的创建、复制、比较和长度计算等基本操作;–了解字符串数组和字符串指针的概念及应用。
2.技能目标:–能够使用C语言编写函数实现字符串的基本操作;–能够运用字符串数组和字符串指针解决实际问题。
3.情感态度价值观目标:–培养学生的逻辑思维能力和编程实践能力;–激发学生对计算机科学和编程的兴趣和热情。
二、教学内容本章节的教学内容主要包括以下几个部分:1.字符串的概念及其在C语言中的表示;2.字符串的基本操作,包括创建、复制、比较和长度计算;3.字符串数组和字符串指针的概念及应用;4.实际编程案例,运用字符串解决实际问题。
三、教学方法为了达到本章节的教学目标,将采用以下几种教学方法:1.讲授法:讲解字符串的基本概念和操作,引导学生理解字符串的内部实现和应用;2.讨论法:学生讨论字符串数组和字符串指针的概念及应用,促进学生之间的交流和思考;3.案例分析法:分析实际编程案例,让学生通过解决问题的方式掌握字符串的操作和应用;4.实验法:安排课堂实验,让学生亲自动手编写代码,巩固所学知识。
四、教学资源为了支持本章节的教学内容和教学方法的实施,将准备以下教学资源:1.教材:《C程序设计原理与应用》;2.参考书:《C语言程序设计》;3.多媒体资料:讲解字符串操作的PPT;4.实验设备:计算机和编程环境。
以上教学资源将有助于丰富学生的学习体验,提高学生的学习效果。
五、教学评估为了全面、客观地评估学生在字符串课程中的学习成果,将采用以下评估方式:1.平时表现:通过课堂参与、提问、讨论等方式评估学生的学习态度和积极性;2.作业:布置相关的字符串操作练习题,评估学生对字符串基本操作的掌握程度;3.考试:设置期末考试,涵盖字符串的概念、操作和应用等内容,以评估学生的综合运用能力。
C课程设计__字符串类
湖南人文科技学院运算机系课程设计说明书课程名称: C++程序设计课程代码: 408025 题目:字符串类的设计年级/专业/班: 09级运算机软件工程专业本二班学生姓名: 田昌亮、文曦远、向文魁、张志丹、魏齐学号: 09436221~09436225 指导教师:袁辉勇开题时间: 2008 年 10 月 27 日完成时间: 2010 年 9 月 25 日目录摘要................................................. 错误!未定义书签。
一、引言.............................................. 错误!未定义书签。
二、设计目的与任务...................................... 错误!未定义书签。
三、设计方案............................................ 错误!未定义书签。
1、整体设计......................................... 错误!未定义书签。
2、详细设计......................................... 错误!未定义书签。
3、程序清单......................................... 错误!未定义书签。
4、程序调试与体会................................... 错误!未定义书签。
5、运行结果......................................... 错误!未定义书签。
四、结论.............................................. 错误!未定义书签。
五、参考文献............................................ 错误!未定义书签。
c课程设计字符串操作
c 课程设计字符串操作一、教学目标本章节的教学目标是让学生掌握C语言中字符串的基本操作,包括字符串的创建、复制、连接、比较和长度计算等。
知识目标要求学生理解字符串在计算机中的存储和表示方式,以及字符串操作的相关函数和语法。
技能目标要求学生能够熟练使用C语言进行字符串操作,解决实际问题。
情感态度价值观目标则是培养学生的编程兴趣,提高学生解决问题的能力,培养学生的创新思维和团队合作意识。
二、教学内容本章节的教学内容主要包括字符串的概念、字符串的创建和复制、字符串的连接和比较、字符串的长度计算等。
具体的教学大纲如下:1.字符串的概念:介绍字符串的定义、特点和表示方式。
2.字符串的创建和复制:讲解字符串的创建方法,以及如何复制字符串。
3.字符串的连接和比较:讲解如何连接两个字符串,以及如何比较两个字符串的大小。
4.字符串的长度计算:讲解如何计算字符串的长度。
三、教学方法为了激发学生的学习兴趣和主动性,本章节将采用多种教学方法。
包括讲授法、案例分析法和实验法等。
首先,通过讲授法向学生介绍字符串的基本概念和操作。
然后,通过案例分析法分析实际问题,让学生学会如何运用字符串操作解决实际问题。
最后,通过实验法让学生动手实践,巩固所学知识。
四、教学资源为了支持教学内容和教学方法的实施,丰富学生的学习体验,我们将选择和准备以下教学资源:1.教材:《C程序设计语言》(K&R)或《C Primer Plus》。
2.参考书:《C++ Primer》或《C和指针》。
3.多媒体资料:讲解字符串操作的视频教程。
4.实验设备:计算机和网络设备,以便进行编程实践。
五、教学评估本章节的教学评估将采用多元化评价方式,全面反映学生的学习成果。
评估方式包括平时表现、作业、考试等。
平时表现主要评估学生在课堂上的参与程度、提问回答等情况,占总评的20%。
作业评估包括课后练习和编程任务,占总评的30%。
考试评估包括期中考试和期末考试,占总评的50%。
C课程设计字符串类的设计与实现
(1)字符串从结构上看是一种以字符为数据元素的线性表,从存储结构的不同可分为顺序表和链式存储结构,它们都适用于字符串,但由于要求的操作不同,为了提高运算效率所选用的存储结构也是不同的。对于字符串改动较频繁的一般用链式存储结构,而顺序存储结构能够高效的读取。所以各有优点。本程序由于需要大量改动数据,理所当然的选择链式存储结构,其算法结构为:
}
else if(flag>0)
{
cout<<"字符串st1比st2大"<<endl;
}
else
{
cout<<"字符串st1比st2小"<<endl;
}
}
break ;
case 4:cout<<"请输入要连接的两个字符串S1 & S2"<<endl;
cout<<"请输入第一个字符串(长度<20):";
选择4则进行字符串的比较功能,这个函数需要读取相比较的两个字符串,通过对字符串的每个字符的逐个的比较有一个返回值返给调用函数。
选择4则进行字符串的连接功能,把一个字符串连在另一个字符串的后面,如上图所示:第一个字符串为dfghgh,另一个字符串为fgghf,则连接的字符串为dfghghfgghf。
输入5则选择求字符串子串的功能,这个函数需要输入一个主串,起始位置p和子串长度len,输入好参数后就可输出所求的子串了。
4.1
//Linequ.h文件,实现类的声明
#include <iostream>
#include <cmath>
using namespace std;
c++程序设计之字符串类的设计报告
C++课程设计课程名称: C++程序设计题目: 字符串类的设计年级/专业/班:学生姓名:学号:指导教师:完成时间: 2013 年 12 月27 日目录摘要 (3)一、引言 (3)二、设计目的与任务 (3)三、设计方案 (3)1、总体设计 (3)2、详细设计 (4)3、程序清单 (5)4、程序调试与体会 (7)5、运行结果 (8)四、结论 (9)摘要本课程设计的目的是设计一个定义字符串string类包含存放字符串的字符数组和字符串中字符的个数的程序用来实现设计菜单实现功能选择、字符串的输入与赋值、字符串的运算、字符串的输出。
设计菜单实现功能选择和字符串的输入与输出都比较简单这里不详细讲述至于字符串的赋值有三种方法LET语句INPUT语句READ/DATA语句给字符串变量赋值字符串的运算有很多种比方说连接、复制、查找、交换、求子串和比较等。
一些编程语言设计为编写字符串处理程序更容易编写使程序变得更简单、清晰方便用户的操作尽量减少用户的操作。
关键词类; 对象; C++; 算法; 函数《C++程序设计》课程设计------字符串类的设计一、引言本课程设计要实现的是一个字符串类的设计的程序,这在现实生活和以后的工作中有很强的实际意义。
符串或串(String)是由零个或多个字符组成的有限序列。
一般记为s='a1a2•••an'(n>=0)。
它是编程语言中表示文本的数据类型。
通常以串的整体作为操作对象如在串中查找某个子串、求取一个子串、在串的某个位置上插入一个子串以及删除一个子串等。
两个字符串相等的充要条件是长度相等并且各个对应位置上的字符都相等。
设p、q 是两个串求q 在p 中首次出现的位置的运算叫做模式匹配。
串的两种最基本的存储方式是顺序存储方式和链接存储方式。
二、设计目的与任务字符串主要用于编程概念说明、函数解释、用法详述见正文这里补充两点1.Free Pascal 中的Ansistring 只能看成整体很多函数无法使用就算是提取单个元素也很麻烦所以除非万不得已就不要用2.字符串在存储上类似字符数组所以它每一位的单个元素都是可以提取的如s=“aaaaabbbbb”则s【1】=“a”s【10】="b"而字符串的零位正是它的长度如s【0】=10上述功能Ansistring 没有。
C++课程设计之string字符串类
课程名称: C++程序设计课程代码:05题目: 字符串类的设计年级/专业/班: 软件工程2班学生姓名:学号:指导教师: 袁辉勇开题时间: 2011 年 5 月 15 日完成时间: 2011 年 6 月 5 日—湖南人文科技学院计算机系目录一引言 (3)二设计目的与任务 (3)三设计方案 (4)1 总体设计 (4)2 详细设计 (4)四程序清单 (4)五程序调试与体会 (10)六运行结果 (14)七结论................................................. 错误!未定义书签。
八参考文献............................................... 错误!未定义书签。
摘要本设计通过定义字符串类来实现对字符串的赋值、连接、复制、查找、交换操作。
首先定义一个字符串类,通过调用字符串类中成员函数,对字符串类进行赋值,然后实现了字符串类之间的连接,字符串类之间的相互复制,字符串类之间的交换,最后可以对该字符串类中的字符串进行查找。
关键字:字符串;类;成员函数;对象AbstractBy defining the design of this type of string to string to the realization of the assignment, to connect, copy, find, exchange operations. First of all, the definition of a type of string, by calling members of the String class function, the type of string for assignment, and then realized the connection between the type of string, string-type between the copy, between string-type In exchange, the last class to the string of string to find.Keywords: string; category; members of the function; object 。
课程设计字符串类的设计
课程设计字符串类的设计一、课程目标知识目标:1. 理解字符串类的基本概念,掌握字符串的表示方法和基本操作。
2. 学会使用字符串类的方法进行字符串的连接、比较、截取、查找和替换等操作。
3. 掌握字符串与基本数据类型之间的转换关系。
技能目标:1. 能够运用字符串类的方法解决实际问题,如字符串的格式化输出、字符串排序等。
2. 能够运用字符串处理技巧进行简单的文本分析,如提取关键词、统计词频等。
3. 学会使用调试工具,对字符串类的程序进行调试和优化。
情感态度价值观目标:1. 培养学生对编程的兴趣和热情,激发学生主动探索字符串类相关知识的欲望。
2. 培养学生的团队协作意识,学会与同学分享字符串类的学习心得和经验。
3. 培养学生良好的编程习惯,注重代码规范,提高代码质量。
课程性质:本课程为计算机科学学科,以字符串类的设计为主题,结合学生年级特点和教学要求,注重理论与实践相结合。
学生特点:学生具备一定的编程基础,对字符串有一定了解,但尚不熟悉字符串类的高级应用。
教学要求:通过本课程的学习,使学生能够熟练运用字符串类的方法,解决实际问题,并培养学生的编程兴趣和团队协作能力。
将课程目标分解为具体的学习成果,以便后续的教学设计和评估。
二、教学内容1. 字符串类的基本概念:- 字符串的定义与表示方法- 字符串的存储结构2. 字符串的基本操作:- 字符串的连接与比较- 字符串的截取、查找与替换- 字符串与基本数据类型的转换3. 字符串类的高级应用:- 字符串的格式化输出- 字符串排序方法- 文本分析技巧:关键词提取、词频统计4. 字符串类的编程实践:- 实践项目1:编写程序,实现字符串的基本操作- 实践项目2:编写程序,实现字符串的格式化输出与排序- 实践项目3:编写程序,进行简单的文本分析5. 教学内容的安排与进度:- 第1课时:字符串类的基本概念与存储结构- 第2课时:字符串的基本操作- 第3课时:字符串类的高级应用- 第4课时:编程实践与讨论教学内容参考教材章节:- 第1章:字符串类的基本概念与操作- 第2章:字符串类的高级应用与编程实践三、教学方法1. 讲授法:- 对于字符串类的基本概念、操作原理等理论知识,采用讲授法进行教学。
C++课程设计之string字符串类
目录一引言 (3)二设计目的与任务 (3)三设计方案 (4)1 总体设计 (4)2 详细设计 (4)四程序清单 (4)五程序调试与体会 (10)六运行结果 (14)七结论................................................. 错误!未定义书签。
八参考文献............................................... 错误!未定义书签。
摘要本设计通过定义字符串类来实现对字符串的赋值、连接、复制、查找、交换操作。
首先定义一个字符串类,通过调用字符串类中成员函数,对字符串类进行赋值,然后实现了字符串类之间的连接,字符串类之间的相互复制,字符串类之间的交换,最后可以对该字符串类中的字符串进行查找。
关键字:字符串;类;成员函数;对象AbstractBy defining the design of this type of string to string to the realization of the assignment, to connect, copy, find, exchange operations. First of all, the definition of a type of string, by calling members of the String class function, the type of string for assignment, and then realized the connection between the type of string, string-type between the copy, between string-type In exchange, the last class to the string of string to find.Keywords: string; category; members of the function; object 。
C程序设计-字符串
输入一个字符串:Hello China 输入的字符串是:Hello China
使用 gets函数允 许输入空格
Hello
C h i n a \0
19
字符串示例
【例】输入一句话,统计空格的个数
C is a programming language
#include <stdio.h>
其中的空格总数为 4
即寻找空格或‘\0’ ⑤未结束则转② ⑥否则打印个数
思考题:将第一个字 符如果是小写字母改 成大写字母
输入一行字符,将此 字符串中最长的单词 输出
#include <stdio.h>
void main()
{ int i=0,num=0;
char str[100],c;
gets(str);
①
do {
while((c=str[i])==' ')i++;
China
不是字符串
再如: char c[ ]=”China”;
是字符 串
C h i n a \0
注意:不可以为数组单独整体赋值,例如
× char str[10]; str=”China”;
10
字符串的输入和输出 对于字符串(字符数组),在程序中既可以逐个引 用字符串中的单个字符(数组元素) 也可以一次引用整个字符串(字符数组)
4
字符串的概念
字符串常量 用双引号“ ”括起的字符序列是字符串常量,C语 言自动为其添加'\0'终结符
“China University of Petroleum"
“Hello World "
"Hello \"UPC\""
c,,实验报告,用string类申明字符串对象实现数组的转置
c,,实验报告,用string类申明字符串对象实现数组的转置C++程序设计实验报告C++实验报告实验一1. 实验要求(1)编写一个函数把华氏温度转换为摄氏温度,转换公式如下C=(F-32)*5/9(2)编写重载函数Max1可分别求两个整数,三个整数,两个双精度数,三个双精度数的最大值。
(3)使用系统函数pow(x,y)计算xy的值,注意包含头文件math.h。
(4)用递归的方法编写函数求Fibonacci级数,观察递归调用的过程2. 实验内容及实验步骤(1)编写函数float Convert(float TempFer),参数和返回值都为float类型,实现算法C=(F-32)*5/9,在main()函数中实现输入、输出。
程序名:lab3_1.cpp。
(2)分别编写四个同名函数max1,实现函数重载,在main()函数中测试函数功能。
程序名:lab3_2.cpp(3)在main()函数中提示输入两个整数x、y,使用cin语句得到x、y的值,调用pow(x,y)函数计算x的y次幂的结果,再显示出来。
程序名:lab3_4.cpp(4)编写递归函数int fib(int n),在主程序中输入n的值,调用fib函数计算Fibonacci级数。
公式为fib(n)=fib(n-1)+fib(n-2),n2;fib(1)=fib(2)=1。
使用if语句判断函数的出口,在程序中用cout语句输出提示信息。
程序名:(转载于: 写论文网:c,,实验报告,用string类申明字符串对象实现数组的转置)lab3_5.cpp(5)使用debug中的Step Into追踪到函数内部,观察函数的调用过程。
3.源程序Lab3_1#includeiostreamusing namespace std;float fun(float x){ float y;y=(x-32)*5/9;return y;}void main(){ float f,c;cout请输入华氏温度: ;cinf;c=fun(f);cout对应的摄氏温度为: cendl; }运行结果Lab3_2#includeiostreamusing namespace std;int Max1(int x,int y){ return (xy?x:y);}int Max1(int x,int y,int z){ int h,k;h=(xy?x:y);k=(hz?h:z);return k;}double Max1(double x,double y) {return (xy?x:y);}double Max1(double x,double y,double z) { double h,k;h=(xy?x:y);k=(hz?h:z);return k;}void main(){ int i,j,k;double l,m,n;cout请输入两个整数: ;cinij;cout最大数为: Max1(i,j)endl;cout请输入三个整数: ;cinijk;cout最大数为: Max1(i,j,k)endl;cout请输入两个双精度数: ;cinlm;cout最大数为: Max1(l,m)endl;cout请输入三个双精度数: ;cinlmn;cout最大数为: Max1(l,m,n)endl;}运行结果Lab3_3#includeiostream#includecmathusing namespace std; void main(){ double p,x,y;cinxy;p=pow(x,y);coutpendl;}运行结果Lab3_4#includeiostream.hint fib(int n);int main(){int n,answer;coutEnter number:endl; cinn;cout\n\n;answer=fib(n);coutansweris thenth Fibonacci number\nendl;return 0;}int fib(int n){coutProcessing fib(n)…endl;if(n3){coutReutrn 1!\n;return(1);}elsecoutCall fib(n-2)and fib(n-1).\nendl;return(fib(n-2)+fib(n-1));}运行结果4.实验体会其实这次实验涉及C++的内容并不多,主要练习的只是C++中的输入输出和重载函数的应用。
设计字符串类课程设计c
设计字符串类课程设计c一、教学目标本课程的教学目标是使学生掌握字符串的基本概念、操作和应用。
通过本课程的学习,学生将能够:1.知识目标:理解字符串的基本概念,包括字符串的表示、长度、比较等;掌握字符串的基本操作,包括创建、复制、连接、转换等;了解字符串的应用场景,如文本处理、数据存储等。
2.技能目标:能够使用编程语言实现字符串的基本操作;能够运用字符串解决实际问题,如数据加密、字符串匹配等。
3.情感态度价值观目标:培养学生的逻辑思维能力,提高学生的问题解决能力;培养学生的创新意识,激发学生的学习兴趣。
二、教学内容本课程的教学内容分为三个部分:字符串的基本概念、字符串的基本操作、字符串的应用。
具体安排如下:1.字符串的基本概念:介绍字符串的表示、长度、比较等基本概念。
2.字符串的基本操作:讲解字符串的创建、复制、连接、转换等基本操作。
3.字符串的应用:介绍字符串在文本处理、数据存储等方面的应用。
三、教学方法为了实现本课程的教学目标,我们将采用以下教学方法:1.讲授法:通过讲解字符串的基本概念、操作和应用,使学生掌握字符串的基本知识。
2.案例分析法:通过分析实际案例,使学生了解字符串在解决实际问题中的应用。
3.实验法:让学生通过编程实践,掌握字符串的基本操作。
四、教学资源为了支持本课程的教学内容和教学方法的实施,我们将准备以下教学资源:1.教材:选择合适的教材,为学生提供系统的字符串知识。
2.参考书:提供相关的参考书,为学生提供更多的学习资料。
3.多媒体资料:制作多媒体课件,为学生提供直观的学习体验。
4.实验设备:准备计算机等实验设备,让学生进行编程实践。
五、教学评估为了全面、客观地评估学生的学习成果,我们将采取以下评估方式:1.平时表现:通过观察学生在课堂上的参与程度、提问回答等情况,评估学生的学习态度和理解程度。
2.作业:布置适量的作业,评估学生对字符串知识的掌握情况。
3.考试:进行期中考试和期末考试,全面评估学生的字符串知识水平和应用能力。
C语言课程设计报告 - 字符串处理
课程设计报告课程设计题目:研究生初试录取学生姓名:李俊专业:计算机应用技术班级: 1140302指导教师:宋文琳2012年 06 月 23日目录一)实验题目 (3)二)实验目的 (3)三)实验要求 (3)四)实验思路 (4)五)实验过程 (6)六)实验调试和结果 (9)七)实验小结 (13)实验题目字符串处理(1)不使用系统库函数,编写多个函数实现;(2)定义字符数组存放字符串,从键盘输入;(3)调用不同的函数,实现字符串的连接、拷贝、比较、求字符串长度、对字符串内字符进行排序、查找字符串中某个字符是否存在;(4)分别输出以上字符串处理的结果。
二)实验目的本次课程设计的主要目的是综合运用所学的C语言知识解决一个比较实际的简单问题,侧重对数组、函数、指针、结构体等相关内容的综合应用,使学生能进一步熟悉掌握C语言的基本语法,进一步提升编程能力并逐步培养编程思维,进而不断提高学生解决问题的能力,并为以后的语言学习打下良好的基础。
三)实验要求1. 学生独立完成课程设计的主要内容;2. 按照实验课表安排进行,不得无故旷课;3.按照选题规则确定课程设计题目,不可随意更换,但可在完成规定的任务之后,根据个人兴趣选做其它题目;4.严格按照报告格式撰写课程设计报告;5.程序实现方式可以自选,可采用指针、数组或其任意组合方式完成。
四)实验思路1)整体思路五)实验过程代码:#include<stdio.h>void main(){void lianjie(char a[],char b[]);void kaobei(char a[],char b[]);void bijiao(char a[],char b[]);void qiuchangdu(char a[],char b[]);void paixu(char a[],char b[]);void chazhao(char a[],char b[],char c);char str1[50],str2[40];char t;int i;printf("需要进行的操作:1.连接;2.拷贝;3.比较;4.求长度;5.排序;6.查找\n");scanf("%d",&i);if(i==1){printf("要连接的字符串1:");scanf("%s",str1);printf("要连接的字符串2:");scanf("%s",str2);lianjie(str1,str2);}else if(i==2){printf("拷贝的字符串1:");scanf("%s",str1);printf("要拷贝的字符串2:");scanf("%s",str2);kaobei(str1,str2);}else if(i==3){printf("要比较的字符串1:"); scanf("%s",str1);printf("要比较的字符串2:");scanf("%s",str2);bijiao(str1,str2);}else if(i==4){printf("要求长度的字符串1:"); scanf("%s",str1);printf("要求长度的字符串2:"); qiuchangdu(str1,str2);}else if(i==5){printf("要排序的字符串1:"); scanf("%s",str1);printf("要排序的字符串2:");scanf("%s",str2);paixu(str1,str2);}else if(i==6){printf("要查找的字符串1:"); scanf("%s",str1);printf("要查找的字符串2:");scanf("%s",str2);printf("输入要查找的字符:");t=getchar();printf("\n");chazhao(str1,str2,t);}elseprintf("没有此操作\n");}void lianjie(char a[],char b[]) {int i=0,j=0;while(a[i]!='\0')i++;while(b[j]!='\0')a[i++]=b[j++]; a[i]='\0';printf("连接结果为:%s\n",a); }void kaobei(char a[],char b[]) {int i=0;for(i=0;i<11;i++)a[i]=b[i];a[i]='\0';printf("拷贝结果为%s;\n",a);}void bijiao(char a[],char b[]) {int i=0;while(a[i]==b[i]&&a[i]!='\0') i++;if(a[i]==b[i])printf("两个字符串相等;\n");else if(a[i]>b[i])printf("第一个字符串大;\n");elseprintf("第二个字符串大;\n");}void qiuchangdu(char a[],char b[]){scanf("%s",b);int i=0,j=0;while(a[i]!='\0')i++;printf("第一个字符串的长度为:%d\n;",i); while(a[j]!='\0')j++;printf("第二个字符串的长度为:%d\n",j); }void paixu(char a[],char b[]){int i=0,j=0,n=0,m=0;char t;while(a[n]!='\0')n++;for(i=0;i<n-1;i++)for(j=0;j<n-1;j++)if(a[j]>a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;}printf("第一个字符串排序结果为:");for(i=0;i<n;i++)printf( "%c",a[i]);while(b[m]!='\0')m++;for(i=0;i<m-1;i++)for(j=0;j<m-1;j++)if(b[j]>b[j+1]){t=b[j];b[j]=b[j+1];b[j+1]=t;}printf("第二个字符串排序结果为:");for(i=0;i<m;i++)printf( "%c",b[i]);printf("\n");}void chazhao(char a[],char b[],char c){int i=0,j=0;while(a[i]!='\0')i++;for( j=0;j<i;j++){if(a[j]!=c) ;elsebreak;}if(j<i) printf("第一个字符串有字符 %c\n;",c); elseprintf("第一个字符没有字符%c;",c);i=0;j=0;while(b[i]!='\0')i++;for( j=0;j<i;j++){if(b[j]!=c) ;elsebreak;}if(j<i) printf("第二个字符串有字符 %c\n",c); elseprintf("第二个字符没有字符%c\n",c);}六)实验调试和结果输入界面:操作结果:调试中出现的错误和改正:定义过程中出现未将引用函数放入主程序中,定义的数组开始没有放在主程序里,而是在引用函数中,引用函数有少数不能自己写出来,在通过多次尝试之后终于得出正确的程序代码,在输入字符时未加取地址符,加入之后又遇到不能输入字符的情况。
VC驿站__编写一个精简版的string类
编写一个精简版的string类该类的具体功能如下所示.1 计算字符串的长度,类似于string类的size或者length2 可对字符串进行赋值,如String str="hello world";3 可将char型字符串直接赋给String型字符串,如:String str="Hello world";char ch[10]="not at all";str=ch;4 可如同对象那样将字符串进行初始化,String str("Mother");5 可将两个字符串相加,然后将合并后的字符串赋给另一个字符串,如String str=s2+s3;6 可执行加等操作(+=),也就是将第1个字符串与第2个字符串相加,然后再赋给第1个字符串,如:String s1+=s27 可对两个字符串进行比较,如str1==str2,str1<str2或者str1>str2.8 可根据字符串的大小自动调节保存字符串的数组的大小。
9 限制数组越界10通过成员函数输出字符串,如s1.getlen()。
11 通过重载输出运算符<<输出字符串,如:string s1("hello"),s2("good");cout<<s1<<s2;12 通过重载输入运算符>>输入字符串,如:cin>>s1>>s2创建String类上节简单地对精简版的String类的功能进行了介绍,本节首先实现这个String类。
我们知道C++自带的String类在声明一个字符串后,如:String s;该字符串s仅仅是声明,并未初始化,因此该字符串是个空字符,只保存了结束符号"\0"。
我们首先来实现这个功能。
由于对象的创建是通过构造函数来实现的,因此我们可以通过默认构造函数来构造一个空字符串。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include<stdio.h>#include<iostream>#include<malloc.h>#include<string.h>#define Base 10000#define M 1000/*初始长度为Base,以后依次增加M*/using namespace std;class String{private:char *str; ///str为指针,len为长度,size为能容纳的最大字符数int len,size;public:///构造函数,能直接确定长度,或者用一个字符串初始化String (int maxsize=Base);String (const char *s);char *c_str() { return str; } ///返回一个指向字符串头部的C语言的指针String insert(int pos,const char c); ///在pos位置插入字符cString insert(int pos,String s); ///在pos位置插入String sString insert(int pos,const char *s); ///插入字符串String Delete(int pos); ///删除pos位置的字符String Delete(int start,int end); ///删除区间内的字符String Delete(char c); ///删除所有的c字符int copy(char *s,int num,int start); ///从start开始复制num个字符到str中int search(char c); ///返回第一个出现字符c的位置char operator [] (int pos);String operator = (String other) ; ///重载= 运算符String operator = (const char * other) ; ///还是重载,使其支持字符串直接赋值String operator + (String &other) const; ///重载,返回两个字符串连接String operator += (String &other) ; ///还是重载,在原String后添加Stringbool operator < ( String &other) ; ///重载< ,比较大小///用重载好了的< ,直接定义其他运算符bool operator > ( String &other) { return other < *this;}bool operator >= ( String &other) { return !(*this < other);}bool operator <= ( String &other) { return !(other < *this);}bool operator == ( String &other) { return (other <= *this) && (*this <= other);}bool operator != ( String &other) { return other < *this || *this < other;}void clear(); ///清空一个字符串///判断一个String是否为空bool empty() { if(len==0) return true; return false; }int length() { return len; } ///返回字符串长度int max_size() { return size; } ///返回能容纳的字符的最大数量};///重新定义输入流istream & operator >> (istream &in, String &other){char s[Base];in >> s;other=s;return in;}///重新定义输出流ostream & operator << (ostream &out,String other){out << other.c_str();return out;}///初始化,若没有参数,则以Base的大小确定String :: String (int maxsize){str=(char *)malloc(sizeof(char)*maxsize);memset(str,0,sizeof(str));len=0;size=maxsize+M;}///用字符串初始化,可以是char *s,也可以使"123"这样的字符串String :: String (const char *s){len=strlen(s);str=(char *)malloc(sizeof(char)*(len + M));memset(str,0,sizeof(str));for(int i=0;i<len;i++) str[i]=s[i];str[len]=0;size=len+M;}///在pos的位置插入字符cString String :: insert(int pos,const char c){if(pos<=0 || pos >len) return *this;char *t=(char *)malloc(sizeof(char)*size);memset(t,0,sizeof(t));bool find=false;for(int i=0,j=0;i<len;i++){if(!find && i==pos-1){i--;t[j++]=c;find=true;}elset[j++]=str[i];}t[++len]=0;free(str);str=t;return *this;}///在pos的位置插入字符串String String :: insert(int pos,const char *s){if(pos <= 0 || pos >len) return *this;int slen=strlen(s);bool find=false;char *t=(char *)malloc(sizeof(slen+size));memset(t,0,sizeof(t));for(int i=0,j=0;i<len;i++){if(!find && i == pos-1){i--;for(int k=0;k < slen;k++) t[j++]=s[k];find = true;}else t[j++]=str[i];}t[len+=slen]=0;free(str);str=t;return *this;}///在pos的位置插入StringString String :: insert(int pos,String ss){if(pos <= 0 || pos >len) return *this;char *s=ss.c_str();int slen=strlen(s);bool find=false;char *t=(char *)malloc(sizeof(slen+size));memset(t,0,sizeof(t));for(int i=0,j=0;i<len;i++){if(!find && i == pos-1){i--;for(int k=0;k < slen;k++) t[j++]=s[k];find = true;}else t[j++]=str[i];}t[len+=slen]=0;free(str);str=t;return *this;}///在pos位置删除一个字符String String :: Delete (int pos){if(pos<=0 || pos >len) return *this;char *t=(char *)malloc(sizeof(size));memset(t,0,sizeof(t));for(int i=0,j=0;i<len;i++){if(i!=pos-1)t[j++]=str[i];}t[--len]=0;free(str);str=t;return *this;}///删除区间内的所有字符String String :: Delete(int start,int end){if(start > end ||start <= 0 || start > len ||end <= 0 || end > len ) return *this;char *t=(char *)malloc(sizeof(size));for(int i=0,j=0; i < len; i++){if(i >= start-1 && i <= end-1) continue;t[j++]=str[i];}t[len-=end-start+1]=0;free(str);str=t;return *this;}///删除一个String内的所有c字符String String :: Delete(char c){int j=0;char *t=(char *)malloc(sizeof(size));for(int i=0;i < len;i++){if(str[i]==c) continue;t[j++]=str[i];}t[j]=0;len=j;free(str);str=t;return *this;}///把String内从start开始的,长度为num的字符全部赋值到以s为首地址的内存里int String :: copy(char *s,int num,int start=0){if(num<=0) return 0;if(start <= 0 || start > len) return 0;int i,slen=strlen(s);for(i=start;i<start+num && i < slen;i++){s[i]=str[i];}return i-1;}///搜索String中的c,返回第一个出现的位置int String :: search(char c){for(int i=0;i<len;i++)if(str[i]==c) return i+1;return -1; ///未找到,返回-1}///重载运算符,使其支持直接读取字符char String :: operator [] (int pos){if(pos<0 || pos>len) return 0;return str[pos];}///重载=,方便赋值String String :: operator = (String other){free(str);len=other.length();size=other.max_size();str=(char *)malloc(sizeof(char) * (size));memset(str,0,sizeof(str));char *t=other.c_str();for(int i=0;i<len;i++) str[i]=t[i];return *this;}///还是重载,支持char *s,"123456"等方式的赋值String String :: operator = (const char * other){int i=0;len=strlen(other);if(len > size){size = len + M;free(str);str=(char *)malloc(sizeof(char) * size);memset(str,0,sizeof(str));}for(i=0;i < len ;i++) str[i]=other[i];return *this;}///重载+String String :: operator + (String &other) const{char *y=other.c_str();char *t=(char *)malloc(sizeof(char)*(other.length()+size));memset(t,0,sizeof(t));int i=0,j=0,k=0;for(i = 0;i < len;i++) t[i]=str[i];for(j = 0;j < other.length();j++) t[i++]=y[j];t[i]=0;String res(t);free(t);return res;}///重载+=String String :: operator += (String &other){int res_len=len+other.length();if( size < res_len ){free(str);size = res_len ;str = (char *)malloc(sizeof(char) * (size));}char *tep=other.c_str();for(int i=0;i < other.length();i++){str[i+len]=tep[i];}len=res_len;return *this;}///重载<,使其支持两个String的直接比较///这里是严格的小于,并用< 直接重载其他比较运算符bool String :: operator < (String &other){char *tstr=other.c_str();for(int i=0;i < len && i < other.length();i++)if(str[i] != tstr[i])return str[i] < tstr[i];return false;}///清空一个Stringvoid String :: clear(){len=0;size=Base;return ;}/*主函数中是一些简单的应用,但不是全部一些类似的运算符没必要体现出来一些函数也没有必要体现出来,例如c_str(),copy()*/int main(){String a,b,x,y,z;String c(100),d("123456");String f(d);a="Hello ";b="World!";a+=b;cout<<a<<endl;cout<<"Please input two strings:";cin >> a >> b;if(a < b) cout<<"a < b"<<endl;else if(a==b) cout<<"a = b"<<endl;else cout<<"a > b"<<endl;cout<<"a + b = "<<a + b<<endl;z=a+b;cout<<"Input a char that you want to find:";cin>> c;cout<<"It's pos is "<<z.search(c[0])<<endl;cout<<"Input a char that you want to delete :";cin >> c;z.Delete(c[0]);cout<<"After deleting,it's "<<z<<endl;int pos;cout<<"Please input the string that you want to insert,and it's pos :";cin >> c >>pos;z.insert(pos,c);cout<<"After inserting,it's "<<z<<endl;z.clear();if(z.empty()) cout<<"After clearing,z is a empty string now"<<endl;//z=a+b;return 0;}。