第8周 项目 3 - 顺序串算法
2015-10-24 16:04
281 查看
问题及代码:
运行结果:
![](https://img-blog.csdn.net/20151024160529823?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
总结:
一开始我觉得老师对第四个求公共子串的定义并不准确,书上写子串的定义是从第i个字符开始的连续j个字符组成的子串。公共子串顾名思义是共有的这样的子串。所以我觉得message和agent的公共子串是age。然后刚要写评论的时候又想到了。这样的话万一有不连续的几个子串,例如messept和espt(自己编的)结果不就是es 和pt吗。这样说来j没说需要>1,这样一来1个字符相同也算公共子串。所以综合考虑。还是老师这样对公共子串的定义比较准确 - -...
/* *Copyright(c) 2015,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:main.cpp *作 者:徐群壮 *完成日期:2015.9.7 *版 本 号:v1.0 * *问题描述:采用顺序存储方式存储串,实现下列算法并测试: (1)试编写算法实现将字符串S中所有值为c1的字符换成值为c2的字符: void Trans(SqString *&s, char c1, char c2); (2)试编写算法,实现将已知字符串所有字符倒过来重新排列。如ABCDEF改为FEDCBA。 void Invert(SqString &s) (3)从串s中删除其值等于c的所有字符。如从message中删除’e’,得到的是mssag。 void DellChar(SqString &s, char c) (4)有两个串s1和s2,设计一个算法求一个这样的串,该串中的字符是s1和s2中公共字符。 所谓公共子串,是由在s1中有,且在s2中也有的字符构成的字符。例s1为”message”,s2为”agent”, 得到的公共子串是”eage”。 *输入描述: *程序输出: */ #include <stdio.h> #include "sqString.h" #include <iostream> using namespace std; void Trans(SqString &s, char c1, char c2) { int i; for (i=0; i<s.length; i++) if (s.data[i]==c1) s.data[i]=c2; } void Invert(SqString &s) { int i; char temp; for (i=0; i<s.length/2; i++) { temp = s.data[i]; s.data[i]=s.data[s.length-i-1]; s.data[s.length-i-1] = temp; } } void DellChar(SqString &s, char c) { int k=0, i=0; //k记录值等于c的字符个数 while(i<s.length) { if(s.data[i]==c) k++; else s.data[i-k]=s.data[i]; i++; } s.length -= k; } SqString CommChar(SqString s1,SqString s2) { SqString s3; int i,j,k=0; for (i=0; i<s1.length; i++) { for (j=0; j<s2.length; j++) if (s2.data[j]==s1.data[i]) break; if (j<s2.length) //s1.data[i]是公共字符 { s3.data[k]=s1.data[i]; k++; } } s3.length=k; return s3; } int main() { SqString s1; StrAssign(s1, "messages"); Trans(s1, 'e', 'a'); cout<<"messages把e替换成a后为:"<<endl; DispStr(s1); SqString s2; StrAssign(s2, "abcdefg"); Invert(s2); cout<<"将abcdefg逆置后为:"<<endl; DispStr(s2); SqString s3; StrAssign(s3, "message"); DellChar(s3, 'e'); cout<<"将message中所有e字符删除后为:"<<endl; DispStr(s3); SqString s4, ss, str; StrAssign(s4, "message"); StrAssign(ss, "agent"); str= CommChar(s4, ss); cout<<"message和agent的公共字符为:"<<endl; DispStr(str); return 0; }
运行结果:
总结:
一开始我觉得老师对第四个求公共子串的定义并不准确,书上写子串的定义是从第i个字符开始的连续j个字符组成的子串。公共子串顾名思义是共有的这样的子串。所以我觉得message和agent的公共子串是age。然后刚要写评论的时候又想到了。这样的话万一有不连续的几个子串,例如messept和espt(自己编的)结果不就是es 和pt吗。这样说来j没说需要>1,这样一来1个字符相同也算公共子串。所以综合考虑。还是老师这样对公共子串的定义比较准确 - -...
相关文章推荐
- 如何创建数据库表之间的关联关系
- CentOS7伪分布式下 hive安装过程中遇到的问题及解决办法
- POJ 2004 Hire and Fire(树+好题)
- 各版本Linux下安装实验ORACLE+10gR2+ASM+升级到10.2.0.5+单实例
- 可变参数列表实现任意个数求平均值和简单的输出功能
- Java 的 ArrayList 的底层数据结构
- POJ 1860 Currency Exchange(Bellman-Ford)
- Cocoa Touch的类名为什么是以两个大写字母开头的?
- cdev_add alloc_chrdev_region 系列函数
- linux命令---ifconfig命令
- 青春
- RHEL6.7下,安装Python3.5,进行编程开发
- 20151024考试总结
- xcode7
- 【UWP应用开发实战】第二弹 移动版秒变桌面版 实践:罗马数计算器
- MKDEV MAJOR MINOR
- robotium 测试常见问题
- 机器学习(十二)学习SVM支持向量机过程中的引申
- 每天一个linux命令(18):route命令
- 交换两数组内容 2.0