字符串类的实现

字符串类的实现
字符串类的实现

课程设计说明书

题 目:字符串类的实现 学生姓名:蔡楠 学 院:理学院 班 级:信计14-1 指导教师:白莲花

二〇一六年一月八日

学校代码: 10128 学 号:201420905013

内蒙古工业大学课程设计(论文)任务书

课程名称:面向对象的程序设计学院:理学院班级:信计14-1 学生姓名:蔡楠学号: 201420905013 指导教师:白莲花

一、题目字符串类的实现

二、目的与意义

面向对象程序设计课程设计可以培养学生综合运用所学面向对象程序设计知识和技能分析与解

决实际问题的能力,以及严肃认真的科学态度和严谨求实的工作作风。

三、要求(包括原始数据、技术参数、设计要求、图纸量、工作量要求等)

●采用面向对象程序设计语言C++进行程序开发

●选用一种C++语言的开发环境设计界面及程序

●在开发环境下,进行程序的运行及调试

四、工作内容、进度安排

主要内容

使用C++程序设计语言及其开发环境实现简单的字符串类的实现完成程序的编写和调试。

工作进度安排

第一天:熟悉课程设计题目及具体要求,确定选择的语言开发环境,查阅资料、学习、讨论。

第二天:根据课题给出的基本需求,进行认真分析和讨论,按照软件工程的思想,完成软件

的面向对象分析工作。

第三天到第四天:在面向对象分析的基础上,对软件进行面向对象的设计工作,完成相关设

计工作。

第五天到第六天:进行面向对象实现工作,确定需要的用户界面以及结构,完成软件的整体

框架,在开发环境下,编程实现所开发的系统。

第七到第八天:调试、测试工作,相关的后期工作。

第九和第十天:撰写课程设计报告3002

五、主要参考文献

[1]郑莉,董渊,何江舟.C++语言程序设计(第4版) [M].北京:清华大学出版.2010.7

[4]钱能.C++程序设计教程(第2版)[M].北京:清华大学出版社.2005

[5]郑莉.C++语言程序设计案例教程(第1版)[M].北京:清华大学出版社.2005

审核意见

系(教研室)主任(签字)

指导教师下达时间 2015 年 12月 28日

指导教师签字:_______________

一个定义字符串(string)类,包含存放字符串的字符数组和字符串中字符的个数的程序,用来实现设计菜单实现功能选择、字符串的输入和赋值、字符串的运算、字符串的输出。设计菜单实现功能选择和字符串的输入和输出都比较简单。

至于字符串的赋值,有三种方法:LET语句、INPUT语句、READ/DATA

语句给字符串变量赋值;字符串的运算有很多种,比如说:连接、复制、查找、交换、求子串和比较等。

定义字符串类,包含字符串的字符数组和字符串中字符的个数。使程序可以进行字符串的输入与赋值:字符串的运算;连接、复制、比较;字符的输出设计的程序的界面界面友好,可以使用户方便使用。实现要求定义一个字符串类String后声明所需要成员函数和友元函数、定义各成员函数,并定义主函数,实现对整个程序的控制。一些编程语言设计为编写字符串处理更容易编写,使程序变得更简单、清晰,方便用户的操作,尽量减少用户的操作。

关键词:类;对象;C++;算法;函数

.

第一章绪论 (1)

1.1研究背景 (1)

1.2简介 (1)

1.2.1类的定义 (1)

1.2.2 C++的对象 (1)

1.2.3 C++字符串基本操作 (1)

1.3需求分析 (1)

第二章系统概念设计 (2)

2.1目的和意义 (2)

2.2功能要求 (2)

2.3程序的界面 (2)

2.4实现要求 (2)

第三章系统详细设计 (3)

3.1基本结构流程 (3)

3.1.1总体功能构图 (3)

3.1.2类的设计说明 (4)

3.1.3主要算法流程图 (5)

3.2程序清单 (6)

第四章系统测试与分析 (10)

4.1运行结果与分析 (11)

总结与体会 (12)

参考文献 (13)

第一章绪论

1.1研究背景

字符串[1]操作是一个不小的主题,在标准C++中,string字符串类成为一个

标准,之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必担心内存是否足够、字符串长度等等,而且作为一个类出现。一些编程语言设计为编写字符串处理更容易编写,使程序变得更简单、清晰,方便用户的操作,尽量减少用户的操作。

1.2简介

1.2.1类的定义

类[2]是面向对象程序设计的核心,它实际是一种新的数据类型,也是实现抽象类型的工具,因为类是通过抽象数据类型的方法来实现的一种数据类型。类是对某一类对象的抽象;而对象是某一种类的实例,因此,类和对象是密切相关的。没有脱离对象的类,也没有不依赖于类的对象。类是一种复杂的数据类型,它是将不同类型的数据和与这些数据相关的操作封装在一起的集合体。类的结构(也即类的组成)是用来确定一类对象的行为的,而这些行为是通过类的内部数据结构和相关的操作来确定的。

1.2.2 C++的对象

定义一个类[6]就相当于创建了一个新的class类型。要使用类,还必须用已经定义的类去说明它的实例变量(即对象)。在C++中,class类型一旦被定义,它的实例变量(对象)就能被创建,并初始化,且能定义指针变量指向它。实例化的类就是对象。

1.2.3 C++字符串基本操作

一个定义字符串[7](string)类,包含存放字符串的字符数组和字符串中字符的个数的程序,用来实现设计菜单实现功能选择、字符串的输入和赋值、字符串的运算、字符串的输出。设计菜单实现功能选择和字符串的输入和输出都比较简单,这里不详细讲述;至于字符串的赋值,有三种方法:LET语句、INPUT语句、READ/DATA语句给字符串变量赋值;字符串的运算有很多种,比如说:连接、复制、查找、交换、求子串和比较等。

1.3需求分析

(1)计算机处理的对象分为数值数据和非数值数据,字符串是最基本的非数值数据。其应用非常广泛,它是许多软件系统(如字符编辑、情报检索、词法分析、符号处理、自然语言翻译等系统)的操作对象。其重要性不言而喻。

(2)字符串是字符的有限集合,可记作a=’a1…an’。其中a是字符串的名,单括号里的字符序列是字符串的值,单引号不是字符串的成分,其作用是为了避免变量名与常量混淆。ai(00,如果等于0,则称a为空串,记作:a=’’。

第二章系统概念设计

2.1目的和意义

掌握面向的程序设计方法,训练运用C++语言的基本要素,进行基本的结构化程序设计和面向对象的程序设计。加深对C++语言的理解,培养学生的设计、编写、调试程序的能力,同时,培养学生面向对象的思想。

2.2功能要求

定义字符串类,包含字符串的字符数组和字符串中字符的个数。

(1)字符串的输入与赋值:

(2)字符串的运算:连接、复制、比较

(3)字符的输出

2.3程序的界面

界面友好,用户方便使用

2.4实现要求

1、定义一个字符串类String。

2、声明所需要成员函数和友元函数。

3、定义各成员函数。

4、定义主函数,实现对整个程序的控制。

5、编译、运行并调试

第三章系统详细设计

3.1基本结构流程

3.1.1总体功能构图

输入几组字符串,字符串的输入和输出都用文件实现,对于输入的字符串,进行相应的连接、复制、查找、交换、求子串、比较等字符串的运算:以直接人性化的操作界面展现出来,当执行字符串的相应运算时,调用程序中相对应的部分的函数模块进行操作。

图3-1 功能结构图

3.1.2类的设计说明

图3-2 设计说明3.1.3主要算法流程图

图3-3 主要算法流程图

write2(MAX) String:menun()

输入n选择文件中第几个字符串

Switch(k)

Strcpy(read2(m )

Write(str1.str)

复制后

的字符

Break Strcat(read2(

m)

Write(str1.str)

Break

连接后

的字符

Compare(read

2(m)

Break

Write(str1.str)

比较后

的字符

Str1.substrin

g(m,n)

Write(str1.str)

求字符

串后的

字符串

Break

Str1.exchang

eread2mm

Write(str1.str)

交换后

的字符

Break

J!=0&&&cin>>k

Return0

开始

3.2程序清单

#include

#include

using namespace std;

char s[12];char s1[20];

const int MAX=5;

class String

{

public:

char *str;

int length;

static void menun()

{

cout<<" *******************************

"<

cout<<"\t* 欢迎进入字符串设计 *\t"<

cout<<" ******************************* "<

cout<<" 1 enter ,执行字符串复制!!!"<

cout<<" 2 enter ,执行字符串链接!!!"<

cout<<" 3 enter ,执行字符创比较!!!"<

cout<<" 4 enter ,执行字符串求字串!!!"<

cout<<" 5 enter ,执行字符串交换!!!"<

cout<<" 0 enter ,退出..."<

}

String(char *s,int l)//构造函数

{

str=new char[strlen(s)+1];

strcpy(str,s);

length=l;

cout<<"Construct String!\n";

}

String()//析构函数

{

delete[] str;

}

void Strcpy(char *s)//复制

{ char *x;

x=new char[strlen(s)-1];

strcpy(x,s);

delete[]str;

str=x;

length=strlen(x);

cout<

}

void Strcat(char *z)//连接

{ char *a;

a=new char[strlen(z)+length];

strcpy(a,str);

strcat(a,z);

str=a;

cout<

}

void Compare(char *b)//比较

{

cout<<"str compare b is:"<

}

char * substring(int start,int end)//求子串

{

char *newstr=new char[end-start+1];

int i,j=0;

for(i=start;i

newstr[j]=str[i];

newstr[j]='\0';

return newstr;

}

void exchange(char *e)//交换

{ char *temp1,*temp2;

temp1=new char[length];

temp2=new char[strlen(e)+1];

strcpy(temp1,str);

strcpy(temp2,e);

str=temp2;

e=temp1;

cout<

cout<

} };

void write(char s1[10])

{

ofstream out;

out.open("c:\\Program.text",ios::out|ios::ate|ios::app);

if(!out)

{

cout<<" "<

}

out<

out.close();

}

char * read()

{

ifstream in;

in.open("c:\\Program.text",ios::in);

if(!in)

{

cout<<" "<

return NULL;

}

int k=1;

while(k)

{ in.getline(s,12);k=0;

}

in.close();

return s;

}

char * read2(int k)

{ ifstream in;

in.open("c:\\Program.text",ios::in);

if(!in)

{ cout<<" "<

return NULL;

}

while(k)

{ in.getline(s,12);k--;}

in.close();

return s;

}

void write2(int n)

{ ofstream out;

out.open("c:\\Program.text",ios::out|ios::ate|ios::app);

if(!out)

{ cout<<" "<

// return NULL;

}

while(n)

{ char s1[20];

cin>>s1;

out<

n--;}

cout<<"\t* 文件创建成功!! *\t"<

out.close();

}

int main()

{

cout<<"\nC++课程设计:字符串类的设计\n";

cout<<" 设计人:蔡楠\n";

cout<<" 学号:201420905013\n";

cout<<"********************************************************\n"; cout<<"********************************************************\n"; cout<<"\n"<<"开始创建文件请输入字符串:\n";

write2(MAX);

String::menun();

cout<<"输入n选择文件中第几个字符串:\n";

int m;

cin>>m;

cout<<"建立类的对象str1:\n";

String str1( read2(m),12);

cout<

int k;int j=1;

cout<<"请选择执行什么操作<当输入为0是结束操作,退出... >\n"; while(j!=0&&cin>>k)

switch(k)

{ case 1:

cout<<"输入m选择文件中第几个字符串复制:\n";

cin>>m;

str1.Strcpy(read2(m));write(str1.str);

cout<<"复制后的字符串:";

cout<

break;

case 2:

cout<<"输入m选择文件中第几个字符串链接:\n";

cin>>m;

str1.Strcat(read2(m));

write(str1.str);

cout<<"连接后的字符串:"<

break;

case 3:

cout<<"输入m选择文件中第几个字符串进行比较:\n";

cin>>m;

https://www.360docs.net/doc/dd15370365.html,pare(read2(m));

break;

case 4:

cout<<"下面开始求子串\n";

int m,n;

cout<<"请输入需要取子串的起始与结束位置: \n";

cin>>m>>n;

cout<<"所求子串为: ";

cout<

break;

case 5:

cout<<"输入m选择文件中第几个字符串进行交换:\n";

cin>>m;

str1.exchange(read2(m));

break;

case 0:

j=0;

cout<<"谢谢使用,退出字符串设计....\n";

break;

}

return 0; }

第四章系统测试与分析4.1运行结果与分析

图4-1程序界面显示的情况

图4-2依次进行运算情况

图4-3各项任务基本执行完毕

总结与体会

通过对这一课题的设计和实现,我对C++Visual 6.0环境进行了深一步的了解,逐渐开始熟练C++Visual 6.0环境的工作界面,以及对每一个快捷键的熟悉,并认识到,熟悉快捷键的使用让编写更加便捷,但还要更加熟悉。

由于程序繁琐,从网上搜索了很多程序。在修改的过程中,注意到相同内容的缩进和对齐。这样做,可以使程序代码出错的情况下,可以快速而且更便捷的找到错误的地方,利于修改。

通过这次编程让我深刻的感受到,良好的编写习惯,不但有助于代码的纠错,也有助于后期的视觉效果。在这次程序设计的过程中,发现从课本的基础知识的认知到实践是一个很不容易的过程,模仿是学习编程写法和了解并拓展思路的很好的方法。

同时,在对不明白的代码运用和编写过程中出现很多问题,指导老师给出了细心的教导和很实用的解决方法,在此对这两周帮助我们的指导老师表示衷心的感谢!同时,也对私下一起讨论学习和帮助我的同组同学表示感谢!

参考文献

[1]李爱华、程磊.面向对象程序设计(C++语言)[M].北京:清华大学出版社.2010年

[2]刘振安、刘燕军著.C++程序设计课程设计[M].北京:机械工业出版社.2004年

[3]谭浩强著.C++程序设计实践指导[M].北京:清华大学出版社.2005年

[4]钱能.C++程序设计教程(第2版)[M].北京:清华大学出版社.2005年

[5]郑莉.C++语言程序设计案例教程(第1版)[M].北京:清华大学出版社.2005年

[6]韦朴、陈泰生. Visual C++通用范例开发金典[M].北京:电子工业出版社.2008年

[7](美)Y. Daniel Liang. Introduction to C++ Programming, Comprehensive.[M.]Prentice Hall译者:王刚、刘晓光、刘璟.北京:机械工业出版社.2008年

字符和字符串类型

一、字符、字符串类型的使用 (一)字符类型 字符类型为由一个字符组成的字符常量或字符变量,字符常量定义: const 字符常量='字符'; 字符变量定义: Var 字符变量:char; 字符类型是一个有序类型, 字符的大小顺序按其ASCⅡ代码的大小而定,函数succ、pred、ord适用于字符类型,例如: 后继函数:succ('a')='b' 前继函数:pred('B')='A' 序号函数:ord('A')=65 【例1】按字母表顺序和逆序每隔一个字母打印,即打印出: a c e g I k m o q s u w y z x r v t p n l j h f d b 程序如下: program ex8_1; var letter:char; begin for letter:='a' to 'z' do if (ord(letter)-ord('a'))mod 2=0 then write(letter:3); writeln; for letter:='z' downto 'a' do if (ord(letter)-ord('z'))mod 2 =0 then write(letter:3); writeln; end. 分析:程序中,我们利用了字符类型是顺序类型这一特性,直接将字符类型变量作为循环变量,使程序处理起来比较直观。

(二)字符串类型 字符串是由字符组成的有穷序列,字符串类型定义: type <字符串类型标识符>=string[n]; var 字符串变量:字符串类型标识符; 其中:n是定义的字符串长度,必须是0~255之间的自然整数,第0号单元中存放串的实际长度,程序运行时由系统自动提供,第1~n号单元中存放串的字符,若将string[n]写成string,则默认n值为255。例如:type man=string[8]; line=string; var name:man; screenline:line; 另一种字符类型的定义方式为把类型说明的变量定义合并在一起。 例如:VAR name:STRING[8]; screenline:STRING; Turbo Pascal中,一个字符串中的字符可以通过其对应的下标灵活使用。 例如:var name:string; begin readln(nsme); for i:=1 to ord(name[0]) do writeln(name[i]); end. 语句writeln(name[i])输出name串中第i个字符。 【例2】求输入英文句子单词的平均长度 程序如下: program ex8_2; var

字符串可以用字符数组与字符串变量两种方式来存储

字符串可以用字符数组与字符串变量两种方式来存储,效果类似。 一、用字符数组来存储字符串: char st1[100],st2[100] ; //字符数组说明 cin>>st1>>st2; long a,b; 输入:hello, world 则st1={…h?,?e?,?l?,?l?,?o?,?,?,?\0?} st2={…w?,?o?,?r?,?l?,?d?,?\0} 字符?\0?为字符串结束标志 1. 字符数组长度 strlen(st1); //如a=strlen(st1);b=strlen(st2); 则a=6,b=5 2. 字符数组比较 不能直接比较,st1>st2是错误的,要用strcmp()函数 strcmp(st1,st2); //st1=st2相等则输出0,st1st2输出1 strncmp(st1,st2,n); 把st1,st2的前n个进行比较。 3. 连接字符数组 不能直接用st1=st1+st2;用strcat()函数 strcat(st1,st2); //将st1和st2连接后赋给st1,本例连接后st1为”hello,world” strncat(st1,st2,n); n表示连接上st2的前n个给st1,在最后不要加'\0'。 4. 替换 strcpy(st1,st2); //用st2的值替换st1的值,字符数组不能如此赋值st1=st2或st1[]=st2[]都是错误的 本例中st1值被替代为”world” strncpy(st1,st2,n); n表示复制st2的前n个给st1,在最后要加'\0'。 5. 其他函数 strchr(st1,ch) //ch为要找的字符。如strchr(st1,?e?);会截取出st1中以字母?e?开头的字符串,要用string类型的来存储,如string c1; c1=strchr(st1,?e?); 则c1为”ello” strspn(st1,st2); //返回st1起始部分匹配st2中任意字符的字符数。本例 中”hello,”中的第一个字符?h?不能在”world”中找到匹配字符,因此返回值为0。如st1=”rose”;st2=”worse”;则返回值为4,因为rose在worse中都能找到匹配字符。 strrev(); //颠倒字符串 二、用字符串来存储字符串 string str1,str2; cin>>str1>>str2; //如输入“hello, world”则str1=”hello,” str2=”world” 可直接赋值: str1=str2; 1. 字符串长度 len = str1.length(); 2. 字符串比较 可以直接比较,即str1>str2;str1==str2;等 3. 连接 可以直接连接,即str1 += str2;等

字符串类设计

华北科技学院计算机学院综合性实验 实验报告 课程名称___________ 《C++程序设计B》 ________ 实验学期2017 至2016学年第二学期 学生所在系部网络工程 ___________________ 年级2015 ___________ 专业班级网络B151 学生姓名_______________ 学号___________________ 任课教师_______________ 胡英___________________ 成绩评定: 1、类及类文件、函数文件设计:A( ),B( ),C( ),D( ),F() 2、程序结构合理,格式美观:A( ),B( ),C( ),D( ),F() 3、语法语义及算法准确:A( ),B( ),C( ),D( ),F() 4、实验结果正确,运行界面:A( ),B( ),C( ),D( ),F() 5、操作熟练,解析完整:A( ),B( ),C( ),D( ),F() 5、报告规范度:A( ),B( ),C( ),D( ),F() 实验成绩___________________________________________

计算机学院制 《C++程序设计》课程综合性实验报告 开课实验室:基础实验室三2018年6月5日

} 五、实验结果(运行界面)及测试数据分析 MyString1("Z00")调用构造函数MyString::MyString(char *str),MyString2(MyStringl) 调用复制构造函数MyString::MyString(const MyString &str) ,MyString3 调用构造函数MyString()。使用运算符重载函数>>输入字符串对MyString3重新赋值为hello。MyString3调用成员函数int length()求得字符串MyString3的长度。使用运算符重载函数=把MyString1的值赋给MyString3。使用运算符重载函数+把字符串MyString1 和MyString3进行连接。使用运算符重载函数>和<对字符串MyString1和MyString3 进行判断。使用运算符重载函数==对字符串MyString1和MyString2进行判断。 MyString3调用函数UprString()把字符串小写转换为大写。MyString1调用函数LwrStri ng()把字符串大写转换为小写。 六、实验总结 通过本学期的课程学习使我对C++程序设计有了初步的认识,也让我对面向对象 有了一个更深刻的理解。本系统虽然仍然存在着不足之处,但对于题目要求实现的功能均已实现。 源代码: #in clude

字符串的模式匹配算法

在前面的图文中,我们讲了“串”这种数据结构,其中有求“子串在主串中的位置”(字符串的模式匹配)这样的算法。解决这类问题,通常我们的方法是枚举从A串(主串)的什么位置起开始与B串(子串)匹配,然后验证是否匹配。假设A串长度为n,B串长度为m,那么这种方法的复杂度是O(m*n)的。虽然很多时候复杂度达不到m*n(验证时只看头一两个字母就发现不匹配了),但是我们有许多“最坏情况”,比如: A=“aaaaaaaaaaaaaaaaaaaaaaaaab”,B=“aaaaaaaab”。 大家可以忍受朴素模式匹配算法(前缀暴力匹配算法)的低效吗?也许可以,也许无所谓。 有三位前辈D.E.Knuth、J.H.Morris、V.R.Pratt发表一个模式匹配算法,最坏情况下是O(m+n),可以大大避免重复遍历的情况,我们把它称之为克努特-莫里斯-普拉特算法,简称KMP算法。 假如,A=“abababaababacb”,B=“ababacb”,我们来看看KMP是怎样工作的。我们用两个指针i和j分别表示,。也就是说,i是不断增加的,随着i 的增加j相应地变化,且j满足以A[i]结尾的长度为j的字符串正好匹配B串的前j个字符(j当然越大越好),现在需要检验A[i+1]和B[j+1]的关系。 例子: S=“abcdefgab” T=“abcdex” 对于要匹配的子串T来说,“abcdex”首字符“a”与后面的串“bcdex”中任意一个字符都不相等。也就是说,既然“a”不与自己后面的子串中任何一字符相等,那么对于主串S来说,前5位字符分别相等,意味着子串T的首字符“a”不可能与S串的第2到第5位的字符相等。朴素算法步骤2,3,4,5的判断都是多余,下次的起始位置就是第6个字符。 例子: S=“abcabcabc” T=“abcabx”

C++中字符数组与string的相互转换及字符串拼接(字符串知识点总结)

【字符数组转化成string类型】 Char ch[]=”ABCDEFG” String str(ch);//也可string str=ch; 或者 Char ch[]=”ABCDEFG” String str; Str=ch;//在原有基础上添加可以用str+=ch; 【string类型转换为字符数组】 Char buf[10] String str(“ABCDEFG”); Length=str.copy(buf,9); Buf[length]=’\0’; 或者 Char buf[10]; String str1(“ABCDEFG”); strcpy(buf,str1.c_str());//strncpy(buf,str1.c_str(),10); 【字符串拼接】 一、string类字符串 重点:函数append的用法: (1)向s1-string的后面加s2-string (1个参数)

s.append(s2); 或s1+=s2; 也可直接将字符串拼接:如 string s=“hello”; s.append(" world");//“hello"后面拼接”world" (2)(2个参数) 1.向s1-string的后面加s2-string的一部分 s1.append(s2,n); // 把字符串s2的前n个字符连接到当前字符串结尾 2.向string后面加多个字符 string s1 = "hello "; s1.append(4,’!’); //在当前字符串结尾添加4个字符! s1 = “hello !!!”; (3).向string的后面加string的一部分(3个参数) 1.string s1 = "hello ", s2 = "beautiful world "; s1.append(s2, 11, 5); //把字符串s2中从11开始的5个字符连接到当前字符串的结尾得s1 = “hello world”; 2.string s1 = "hello ", s2 = “beautiful world”; s1.append(s2.begin()+11, s2.end()); //把s2的迭代器begin()+11和end()之间的部分连接到当前字符串的结尾得“hello world”; 二、char数组类字符串 重点:strcat()函数,该函数接受两个字符串作为参数,该函数把第2个字符串

微机原理实验2程序 - 字符串匹配实验

8086汇编语言程序实验: 实验二、字符串匹配实验 题目: 1、(必做题)编程实现:从键盘分别输入两个字符串(不必等长), 然后进行比较,若两个字符串有相同的字符,则显示“MATCH”,若字符都不相同则显示“NO MATCH”。 2、(选做题)编程实现:从键盘分别输入两个字符串,然后进行比 较,若两个字符串的长度和对应字符都完全相同,则显示“MATCH”,否则显示“NO MATCH”。 对应程序如下所示: ;第1题 ;==================================== HUICHE MACRO ;定义一个具有回车、换行功能的宏,为程序多次回车换行所调用。 MOV DL,0DH ;用2号功能“显示”回车。 MOV AH,02H INT 21H MOV DL,0AH ;用2号功能“显示”换行。 MOV AH,02H INT 21H ENDM DA TA SEGMENT MESSAGE1 DB 'MATCH','$' ;定义“MATCH”提示信息,“$”作为调用9号功能的结束符。 MESSAGE2 DB 'NO MATCH','$' ;定义“NO MATCH”提示信息。 TISHI1 DB 'Please input the first string:','$' ;提示输入第1个字符串的提示信息。 TISHI2 DB 'Please input the second string:','$' ;提示输入第1个字符串的提示信息。 STRING1 DB 100 ; 100为存第一个字符串的最大可用空间的字节数。 DB ? ;预留字节,存储将要输入的第1个字符串的实际长度。 DB 100 DUP(?) ;预留100个字节空间,用于存放第1个字符串。 STRING2 DB 100 DB ? DB 100 DUP(?) DA TA ENDS

课程设计--实现字符串的多种操作

课程设计--实现字符串的多种操作

C++课程设计报告 课程设计题目:实现字符串的多种 操作 姓名:刘欢 学籍号:201110910422 专业班级:计算机科学与技术2班 指导教师:秦相林

目录引言 1.设计目的 2.设计题目 3.设计需求 4.设计总体思路 5.详细设计 6.运行结果 7.课程设计心得 8.参考文献

引言 随着人们生活水平的提高,计算机发展异常迅速。如今,计算机已经深入到我们社会的各个领域,计算机的使用也已不再局限于科学计算,它已进入人类社会的各个领域并发挥着越来越重要的作用。通过计算机对各类信息的管理已经成为一种高效、快捷的方式。而C++课程设计是我们实践性教学环节之一,结合实际应用的要求,使课程设计既覆盖C++的知识点,又接近工程实际需要。通过课程设计的综合训练,培养我们实际分析问题、解决问题的能力,以及编程和动手能力,最终目标是通过课程设计这种形式,帮助学我们系统掌握C++这门课程的主要内容, 本课程设计就是要求完成一个字符串类的设计,使所设计出的字符串类具有包括复制、连接、比较、求子串、交换等功能 1. 设计目的 本设计通过定义字符串类来实现对字符串的复制、连接、比较、求子串、交换操作。首先定义一个字符串类,通过调用字符串类中成员函数,对字符串类进行复制,然后实现了字符串类之间的连接,字符串类之间的相互比较,求一个字符串的子串,以及实现两个字符串之间的交换。 2. 设计题目 实现字符串的多种操作 3.设计需求 通过本次的C++课程设计,让我们学会把书本上的知识应用到了实际中来。深入了解C++各类及相关函数的应用,结合其它相关知识,如软件工程等,把所学知识融会贯通。对系统进行功能需求分析,设计合理的数据结构和系统框

20-字符数组与字符串类型.

字符数组与字符串类型 字符型变量:VAR CH :CHAR ; 一、字符数组:数组基类型(元素的类型为字符型。 VAR A:ARRAY [ 1. . N ] OF CHAR ; 输入、输出也与普通数组一样,只能用循环结构,逐个元素地给它赋值,即: FOR I:= 1 TO N DO READ(A[ I ] ; 或者: A[I]:=‘ X ’ ; 不能用:A :=‘ IT IS A PEN ’ ; 例一:判断从键盘输入的字符串是否为回文(从左到右和从右到左读一串字符的值是一样的, 如 ABCDCBA , 1234321, 11, 1 ,串长 < 100 ,且以点号‘. ’结束。 2000年竞赛题:判断一个数是否为回文数。 VAR LETTER:ARRAY [ 1. . 100 ] OF CHAR ; I, J :0. . 100 ; CH:CHAR ; BEGIN WRITELN(‘ INPUT A STRING :’ ; I := O ; READ (CH ; WHILE CH < > ‘. ’ DO BEGIN

I:=I+1 ; LETTER[ I ] := CH ; READ (CH ; END ; J :=1 ; { I 指向数组的尾部, J 指向数组的头部 ,逐个比较 } WHILE (J < I AND (LETTER[ J ]= LETTER[ I ] DO BEGIN I:= I – 1 ; J :=J + 1 END ; IF J > = I THEN WRITELN(‘ YES ’ ELSE WRITELN(‘ NO ’ ; END . 二、字符串类型:针对 TURBO PASCAL 1、字符串常量:CONST STR=‘ THIS IS A BOOK。’ ; 我们经常在 WRITE 语句中用到字符串,也可以 WRITE (STR ;语句输出 STR 的值。 2、字符串类型:也是一种构造类型。 定义形式:TYPE 字符串类型名 = STRING[ N ];

汇编语言查找匹配字符串

汇编语言实验二查找匹配字符串 一、目的 查找匹配字符串SEARCH 二、实验内容 程序接收用户键入的一个关键字以及一个句子。如果句子中不包含关键字则显示‘NO match!’;如果句子中包含关键字则显示‘MATCH’,且把该字在句子中的位置用十六进制数显示出来。 流程图

N Y Y Y 输入关键字 结束 关键字长度=0 输入句子 句子长度<关键字长度 Y 保存关键字长度到cx,cx 入栈,保存总循环次数(句子长度-关键字长度+1) 到al,将句子的首地址放进bx(作为基址寄存器)si=di=0(变址寄存器) 开始比较[bx+di]与[si]是否相等 si+1,di+1,cx-1(同时指向下一个字符) Y N bx+1(句子指向下一个字符)cx 出栈,再入栈,si,di 清零,al-1cx 是否为0 N 匹配完成,调用子程序输出 al 是否为0 不匹配,输出三、设计和编码 DATA SEGMENT mess1DB 'Enter keyword:','$'mess2DB 'Enter Sentence:','$'mess3DB 'Match at location:','$'mess4DB 'NOT MATCH.',13,10,'$'mess5DB 'H if the sentence',13,10,'$'

change DB13,10,'$' stoknin1label byte max1db10 act1db? stokn1db10dup(?) stoknin2label byte max2db50 act2db? stokn2db50dup(?) DATA ENDS STACKS SEGMENT ;此处输入堆栈段代码 STACKS ENDS CODE SEGMENT ;*************************************代码段 main proc far assume cs:code,ds:data,es:data START: push ds sub AX,AX sub BX,BX sub DI,DI sub SI,SI push AX;为返回dos并清空后面要用到的寄存器 MOV AX,DATA MOV DS,AX LEA DX,mess1 MOV ah,09 INT21h;输出Enter keyword LEA DX,stoknin1 MOV ah,0ah;用21号中段的0ah号功能获取关键字 INT21h cmp act1,0 je exit;如果为空直接退出程序 a10: ;********************************输入Sentence并判断 LEA DX,change MOV ah,09 INT21h;输出回程,换行 LEA DX,mess2 MOV ah,09 INT21h;输出Enter Sentence: LEA DX,stoknin2 MOV ah,0ah INT21h;用21号中段的0ah号功能获取句子 MOV AL,act1 CBW MOV CX,AX;保存关键字长度到cx PUSH CX;cx入栈 MOV AL,act2 cmp AL,0 je a50;保存句子长度到al,若句子为空则跳转显示not match SUB AL,act1 js a50;若句子长度小于关键字长度,则跳转显示not match INC AL CBW LEA BX,stokn2;将句子的首地址放进BX MOV DI,0 MOV SI,0 a20: ;****************************************比较,内循环 MOV AH,[BX+DI] CMP AH,stokn1[SI];遇见字符不相等就跳转到a30

C++课程设计String类

#include #include #include #include #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位置插入字符c String insert(int pos,String s); ///在pos位置插入String s String 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后添加String bool 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;}

windows中的字符串类型

Windows字符串类型 C++主要使用的是C-Style字符串,而M$在Windows中又增加了很多C-Style字符串的变体。这个一多嘛,就容易乱~ 所谓字符串,就是由字符组合而成,所以我们先来将将字符类型。 首先,存在两种最基本的字符类型:char和wchar_t。char大家都很熟悉了,我就跳过。至于wchar_t,是应用于UNICODE的宽字符,即一个字符2Bytes,16Bits。事实上,Windows 中利用 typedef unsigned short wchar_t 定义wchar_t 然后为了书写方便(MS我也没觉得有多大差别),M$又把那两个基本字符类型重新的给他typedef了一遍,即: typedef char CHAR typedef wchar_t WCHAR 为了使得兼容性更加,M$又定义了TCHAR数据类型: #ifdef UNIOCDE typedef WCHAR TCHAR #else typedef CHAR TCHAR #endif 这样,你不用关心是要使用ANSI字符串还是Unicode,编译器会自动根据你的OS来选择。 然后,M$又利用上面的几种基本数据类型,定义了一些字符串指针类型。 LPSTR和LPCSTR:LPSTR是指向以0结尾的ANSI字符串的指针,后者是const指针typedef CHAR* LPSTR typedef const CHAR* LPCSTR LPWSTR和LPCWSTR:LPWSTR是指向以0结尾的UNICODE字符串的指针,后者是const 指针 typedef WCHAR* LPWSTR typedef const WCHAR* LPCWSTR 同样,为了摆脱对ANSI还是UNICODE的选择麻烦,M$也增加了LPTSTR和LPCTSTR两个字符串指针类型。他们被如下定义: typedef TCHAR* LPTSTR #ifdef UNICODE typedef LPWSTR LPTSTR #else typedef LPSTR LPTSTR #endif /////////////////////////////////////

字符串和字符数组之间的转换

字符串和字符数组之间的转换 2010-11-02 16:53:00| 分类: |举报|字号订阅 字符串类提供了一个void ToCharArray() 方法,该方法可以实现字符串到字符数组的转换。如下例: private void TestStringChars() { string str = "mytest"; char[] chars = (); = ""; "Length of \"mytest\" is " + + "\n"); "Length of char array is " + + "\n"); "char[2] = " + chars[2] + "\n"); } 例中以对转换转换到的字符数组长度和它的一个元素进行了测试,结果如下: Length of "mytest" is 6 Length of char array is 6 char[2] = t 可以看出,结果完全正确,这说明转换成功。那么反过来,要把字符数组转换成字符串又该如何呢? 我们可以使用类的构造函数来解决这个问题。类有两个构造函数是通过字符数组来构造的,即 String(char[]) 和String[char[], int, int)。后者之所以多两个参数,是因为可以指定用字符数组中的哪一部分来构造字符串。而前者则是用字符数组的全部元素来构造字符串。我们以前者为例, 在 TestStringChars() 函数中输入如下语句: char[] tcs = {'t', 'e', 's', 't', ' ', 'm', 'e'}; string tstr = new String(tcs); "tstr = \"" + tstr + "\"\n"); 运行结果输入 tstr = "test me",测试说明转换成功。 实际上,我们在很多时候需要把字符串转换成字符数组只是为了得到该字符串中的某个字符。如果只是为了这个目的,那大可不必兴师动众的去进行转换,我们

字符串类数据列类型

字符串类数据列类型 字符串可以用来表示任何一种值,所以它是最基本的类型之一。我们可以用字符串类型来存储图象或声音之类的二进制数据,也可存储用gzip压缩的数据。下表介绍了各种字符串类型:Table 1.3. 字符串类数据列类型 类型长度占用存储空间CHAR[(M)]M字节M字节VARCHAR[(M)]M字节L+1字节TINYBLOD,TINYTEXT2^8-1字节L+1字节BLOB,TEXT2^16-1字节L+2MEDIUMBLOB,MEDIUMTEXT2^24-1字节L+3LONGBLOB,LONGTEXT2^32-1字节L+4ENUM('value1','value2',...)65535个成员1或2字节SET('value1','value2',...)64个成员1,2,3,4或8字节 L+1、L+2是表示数据列是可变长度的,它占用的空间会根据数据行的增减面则改变。数据行的总长度取决于存放在这些数据列里的数据值的长度。L+1或L+2里多出来的字节是用来保存数据值的长度的。在对长度可变的数据进行处理时,MySQL要把数据内容和数据长度都保存起来。 如果把超出字符串长度的数据放到字符类数据列中,MySQL会自动进行截短处理。 ENUM和SET类型的数据列定义里有一个列表,列表里的元素就是该数据列的合法取值。如果试图把一个没有在列表里的值放到数据列里,它会被转换为空字符串(“”)。 字符串类型的值被保存为一组连续的字节序列,并会根据它们容纳的是二进制字符串还是非二进制字符而被区别对待为字节或者字符: 二进制字符串被视为一个连续的字节序列,与字符集无关。MySQL把BLOB数据列和带BINARY属性的CHAR和VARCHAR数据列里的数据当作二进制值。 非二进制字符串被视为一个连续排列的字符序列。与字符集有关。MySQL把TEXT列与不带BINARY属性的CHAR和VARCHAR数据列里的数据当作二进制值对待。 在MySQL4.1以后的版本中,不同的数据列可以使用不同的字符集。在MySQL4.1版本以前,MySQL用服务器的字符集作为默认字符集。 非二进制字符串,即我们通常所说的字符串,是按字符在字符集中先后次序进行比较和排序的。而二进制字符串因为与字符集无关,所以不以字符顺序排序,而是以字节的二进制值作为比较和排序的依据。下面介绍两种字符串的比较方式: 二进制字符串的比较方式是一个字节一个字节进行的,比较的依据是两个字节的二进制值。也就是说它是区分大小写的,因为同一个字母的大小写的数值编码是不一样的。 非二进制字符串的比较方式是一个字符一个字符进行的,比较的依据是两个字符在字符集中的先后顺序。在大多数字符集中,同一个字母的大小写往往有着相同的先后顺序,所以它不区分大小写。 二进制字符串与字符集无关,所以无论按字符计算还是按字节计算,二进制字符串的长度都是一样的。所以VARCHAR(20)并不表示它最多能容纳20个字符,而是表示它最多只能容纳可以用20个字节表示出来的字符。对于单字节字符集,每个字符只占用一个字节,所以这两者的长度是一样的,但对于多字节字符集,它能容纳的字符个数肯定少于20个。 1.2.2.1. CHAR和VARCHAR CHAR和VARCHAR是最常用的两种字符串类型,它们之间的区别是: CHAR是固定长度的,每个值占用相同的字节,不够的位数MySQL会在它的右边用空格字符补足。 VARCHAR是一种可变长度的类型,每个值占用其刚好的字节数再加上一个用来记录其长度的字节即L+1字节。 CHAR(0)和VARCHAR(0)都是合法的。VARCHAR(0)是从MySQL4.0.2版开始的。它们的作用是作为占位符或用来表示各种on/off开关值。

C++课程设计之string字符串类

课程名称: ________ C++ 程序设计____________ 课程代码: _________________ 05 __________ 题目: _______ 字符串类的设计_______ 年级/专业/班: 软件工程2班 __________________ 学生姓名: _________________ 学号: ___________ 指导教师: 袁辉勇_________ 开题时间:2011 年5_月丄5_日 完成时间:2011 年6_月_5_日 —湖南人文科技学院计算机 系

引言 ........................................ 设计目的与任务 .................................. _1_总体设计 ....................................... _2_详细设计 ....................................... 四程序清单....................................... 五程序调试与体会................................... 六运行结果....................................... 14

七结论................................. 八参考文献............................. 摘要 本设计通过定义字符串类来实现对字符串的赋值、连接、复制、查找、交换操作。首先定义一个字符串类,通过调用字符串类中成员函数,对字符串类进行赋值,然后实 现了字符串类之间的连接,字符串类之间的相互复制,字符串类之间的交换,最后可以对该字符串类中的字符串进行查找。 关键字:字符串;类;成员函数;对象 Abstract By 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 membersof 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 3 3 4 4 4 4 10 错误!未定义书签。 错误!未定义书签。

字符串操作(算法与数据结构课程设计)

字符串操作 一、问题描述 字符串是一种常见的数据类型,在现实生活中有着广泛的应用。本次课程设计需要选择合适的结构完成字符串的建立,实现串的基本操作,编写三种模式匹配算法和字符串的加密与解密算法,并利用它们实现字符串的应用:包括文本文件对单词的检索和计数。 二、基本要求 程序要求选择合适的存储结构,并实现以下功能: 1.完成串的基本操作,如:串的赋值,比较,连接,插入,删除; 2.实现串的模式匹配,包括:穷举法,BF算法和KMP算法; 3.字符串的应用:字符串的加密与解密;文本文件单词的计数;文本文件单 词的检索; 三、测试数据 1.对模式匹配(穷举法,KMP算法和BF算法)的测试:如:在“asd sfhasd asd” 中找从第3个下标开始匹配的模式串“asd”。 2.对加密与解密的测试:如:对串“afhbs 537hsj/sjdh”加密,再将加密 后的串还原。 3.对文本文件单词的计数和检索的测试:如创建一个文本文件,在其中对单 词“me”进行计数并且检索其所处行、列。 四、算法思想 1、用结构体SString记录字符串信息,其中ch代表字符串,length代表字符串长度。 2、模式匹配: 1)穷举法的Index(S,T,pos): 从位置开始通过SubString截取S中T长度的字符串,并与T通过StrCompare进行比较,若找到则返回位置;否则继续。若没找到,返回-1。 2)BF算法: IndexBF(S, T,pos) 主串S从pos位置开始,模式串T从0位置开始,从目标串s=“s0s2…sn-1"的第一个字符开始和模式串t=“t0t2…tm-1"中的第一个字符比较,若相等,则继续逐个比较后续字符;否则从目标串s的第二个字符开始重新与模式串t的第一个字符进行比较。依次类推,若从模式串s的i位置字符开始,每个字符依次和目标串t中的对应字符相等,则匹配成功,该算法返回i;否则,匹配失败,函数返回-1。 3)KMP算法:

C语言基本类型字符型(char)用法介绍

C语言基本类型:字符型(char)用法介绍 1.字符型(char)简介 字符型(char)用于储存字符(character),如英文字母或标点。严格来说,char 其实也是整数类型(integer type),因为char 类型储存的实际上是整数,而不是字符。计算机使用特定的整数编码来表示特定的字符。美国普遍使用的编码是ASCII(American Standard Code for Information Interchange 美国信息交换标准编码)。例如:ASCII 使用65 来代表大写字母A,因此存储字母A 实际上存储的是整数65。注意:许多IBM大型机使用另一种编码——EBCDIC(Extended Binary-Coded Decimal Interchange Code 扩充的二进制编码的十进制交换码);不同国家的计算机使用的编码可能完全不同。 ASCII 的范围是0 到127,故而7 位(bit)就足以表示全部ASCII。char 一般占用8 位内存单元,表示ASCII绰绰有余。许多系统都提供扩展ASCII(Extended ASCII),并且所需空间仍然在8 位以内。注意,不同的系统提供的扩展ASCII 的编码方式可能有所不同! 许多字符集超出了8 位所能表示的范围(例如汉字字符集),使用这种字符集作为基本字符集的系统中,char 可能是16 位的,甚至可能是32 位的。总之,C 保证char 占用空间的大小足以储存系统所用的基本字符集的编码。C 语言定义一个字节(byte)的位数为char 的位数,所以一个字节可能是16 位,也可能是32 位,而不仅仅限于8 位。 2. 声明字符型变量 字符型变量的声明方式和其它类型变量的声明方式一样: char good; char better, best; 以上代码声明了三个字符型变量:good、better,和best。 3. 字符常量与初始化 我们可以使用以下语句来初始化字符型变量: char ch = 'A'; 这个语句把ch 的值初始化为 A 的编码值。在这个语句中,'A' 是字符常量。C 语言中,使用单引号把字符引起来就构成字符常量。我们来看另外一个例子: char fail; /* 声明一个字符型变量*/ fail = 'F'; /* 正确*/ fail = "F"; /* 错!"F" 是字符串字面量*/

微机原理实验三 字符串匹配程序.

实验三字符串匹配程序 教学目标:通过教学让学生掌握显示提示信息的方法及接收键盘输入信息的方法。 重点、难点: 重点:字符串匹配的算法,用INT 21H 的09号子功能显示提示信息,用INT 21H的0A号子功能接收字符 难点:用INT 21H的0A号子功能接收字符 课时安排:2学时 教学过程:讲解实验过程 一实验目的: 掌握显示提示信息的方法及接收键盘输入信息的方法 二实验内容: 编写程序,实现两个字符串的比较。如相同,则显示“MATCH”,否则,显示”NO MATCH”. 三程序框图(讲解流程图,介绍编写程序的思路) 四实验原理 1、讲解DB、DUP、EQU等伪指令的功能以及使用格式 2、讲解INT 21H 的09H子功能的功能、工作情况以及使用格式 3、讲解INT 21H的0AH子功能的功能、工作情况以及使用格式 4、讲解串扫描指令SCASB的功能以及使用格式 5、入栈、出栈指令PUSH 、POP的使用情况 五实验参考程序

CRLF MACRO MOV AH,02H MOV DL,0DH INT 21H MOV AH,02H MOV DL,0AH INT 21H ENDM DATA SEGMENT MESS1 DB 'MA TCH',0DH,0AH,'$' MESS2 DB 'NO MA TCH',0DH,0AH,'$' MESS3 DB 'INPUT STRING1:',0DH,0AH,'$' MESS4 DB 'INPUT STRING2:',0DH,0AH,'$' MAXLEN1 DB 81 ACTLEN1 DB ? STRING1 DB 81 DUP(?) MAXLEN2 DB 81 ACTLEN2 DB ? STRING2 DB 81 DUP(?) DATA ENDS STACK SEGMENT STA DB 20 DUP(?) TOP EQU LENGTH STA STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DA TA,SS:STACK,ES:DATA START: MOV AX,DA TA MOV DS,AX MOV AX,DA TA MOV ES,AX MOV AX,STACK MOV SS,AX MOV SP,TOP ;段寄存器及堆栈初始化 MOV AH,09H MOV DX,OFFSET MESS3 INT 21H ;显示输入提示1 MOV AH,0AH MOV DX,OFFSET MAXLEN1 INT 21H ;接收键入的字符串1 CRLF ;回车换行 MOV AH,09H MOV DX,OFFSET MESS4 INT 21H ;显示输入提示2 MOV AH,0AH MOV DX,OFFSET MAXLEN2 INT 21H ;接收键入的字符串2 CRLF CLD

相关文档
最新文档