第八周项目3-顺序串算法
来源:互联网 发布:ubuntu拷贝文件夹 编辑:程序博客网 时间:2024/04/30 13:39
问题及代码:
/* Copyright (c)2016,烟台大学计算机与控制工程学院 All rights reserved. 文件名称:a.cpp 作 者:房斐 完成日期:2016年10月21日 版 本 号: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”。 SqString CommChar(SqString s1,SqString s2); 输入描述:各种串的输入。 程序输出:各操作后的输出。 */
sqString.h
#define MaxSize 100 //最多的字符个数 typedef struct { char data[MaxSize]; //定义可容纳MaxSize个字符的空间 int length; //标记当前实际串长 } SqString; void StrAssign(SqString &s,char cstr[]); //字符串常量cstr赋给串s void StrCopy(SqString &s,SqString t); //串t复制给串s bool StrEqual(SqString s,SqString t); //判串相等 int StrLength(SqString s); //求串长 SqString Concat(SqString s,SqString t); //串连接 SqString SubStr(SqString s,int i,int j); //求子串 SqString InsStr(SqString s1,int i,SqString s2); //串插入 SqString DelStr(SqString s,int i,int j) ; //串删去 SqString RepStr(SqString s,int i,int j,SqString t); //串替换 void DispStr(SqString s); //输出串 void Trans(SqString &s, char c1, char c2); //试编写算法实现将字符串S中所有值为c1的字符换成值为c2的字符void Invert(SqString &s); //试编写算法,实现将已知字符串所有字符倒过来重新排列。如ABCDEF改为FEDCBA void DellChar(SqString &s, char c); //从串s中删除其值等于c的所有字符。如从message中删除’e’,得到的是mssag。 SqString CommChar(SqString s1,SqString s2); //有两个串s1和s2,设计一个算法求一个这样的串,该串中的字符是s1和s2中公共字符。所谓公共子串,是由在s1中有,且在s2中也有的字符构成的字符。例s1为”message”,s2为”agent”,得到的公共子串是”eage”。
sqString.cpp
#include"sqString.h" #include<stdio.h> #include<malloc.h> void StrAssign(SqString &s,char cstr[]) //字符串常量cstr赋给串s { int i; for(i=0;cstr[i]!='\0';i++) s.data[i]=cstr[i]; s.length=i; } void StrCopy(SqString &s,SqString t) //串t复制给串s { int i; for(i=0;i<t.length;i++) s.data[i]=t.data[i]; s.length=t.length; } bool StrEqual(SqString s,SqString t) //判串相等 { bool same=true; int i; if(s.length!=t.length) same=false; else for(i=0;i<s.length;i++) if(s.data[i]!=t.data[i]) { same=false; break; } return same; } int StrLength(SqString s) //求串长 { return s.length; } SqString Concat(SqString s,SqString t) //串连接 { SqString str; int i; str.length=s.length+t.length; for(i=0;i<s.length;i++) str.data[s.length+i]=t.data[i]; return str; } SqString SubStr(SqString s,int i,int j) //求子串 { SqString str; int k; str.length=0; if(i<=0||i>s.length||j<0||i+j-1>s.length) return str; for(k=i-1;k<i+j-1;k++) str.data[k-i+1]=s.data[k]; str.length=j; return str; } SqString InsStr(SqString s1,int i,SqString s2) //串插入 { int j; SqString str; str.length=0; if(i<=0||i>s1.length+1) return str; for(j=0;j<i-1;j++) str.data[j]=s1.data[j]; for(j=0;j<s2.length;j++) str.data[i+j-1]=s2.data[j]; for(j=i-1;j<s1.length;j++) str.data[s2.length+j]=s1.data[j]; str.length=s1.length+s2.length; return str; } SqString DelStr(SqString s,int i,int j) //串删去 { int k; SqString str; str.length=0; if(i<=0||i>s.length||i+j>s.length+1) return str; for(k=0;k<i-1;k++) str.data[k]=s.data[k]; for(k=i+j-1;k<s.length;k++) str.data[k-j]=s.data[k]; str.length=s.length-j; return str; } SqString RepStr(SqString s,int i,int j,SqString t) //串替换 { int k; SqString str; str.length=0; if(i<=0||i>s.length||i+j>s.length) return str; for(k=0;k<i-1;k++) str.data[k]=s.data[k]; for(k=i+j-1;k<s.length;k++) str.data[t.length+k-j]=s.data[k]; str.length=s.length-j+t.length; return str; } void DispStr(SqString s) //输出串 { int i; if(s.length>0) { for(i=0;i<s.length;i++) printf("%c",s.data[i]); printf("\n"); } } void Trans(SqString &s, char c1, char c2)//试编写算法实现将字符串S中所有值为c1的字符换成值为c2的字符{int i;for(i=0;i<s.length;i++)if(s.data[i]==c1)s.data[i]=c2;}void Invert(SqString &s)//试编写算法,实现将已知字符串所有字符倒过来重新排列。如ABCDEF改为FEDCBA {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)//从串s中删除其值等于c的所有字符。如从message中删除’e’,得到的是mssag。 {int k=0,i=0; 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) //有两个串s1和s2,设计一个算法求一个这样的串,该串中的字符是s1和s2中公共字符{ SqString str; int i,j,t=0; for(i=0;i<s1.length;i++) { for(j=0;j<s2.length;j++) { if(s1.data[i]==s2.data[j]) { str.data[t]=s1.data[i]; t++; } } } str.length=t; if(t==0) //无公共字符时提示 printf("No common characters!\n"); return str;}
main.cpp
#include"sqString.h" #include<stdio.h> #include<malloc.h> int main() { SqString s; StrAssign(s, "messages"); Trans(s, 'e', 'a'); DispStr(s);printf("\n"); SqString s1; StrAssign(s1, "abcdefg"); Invert(s1); DispStr(s1); printf("\n"); SqString s2; StrAssign(s2, "message"); DellChar(s2, 'e'); DispStr(s2); printf("\n");SqString s3,s4,s5; char a[1000],b[1000]; while(gets(a)) { gets(b); StrAssign(s4,a); StrAssign(s5,b); s=CommChar(s4,s5); DispStr(s3); printf("\n"); //每组输出结果之间加一个换行 } return 0; }
运行结果:
0 0
- 第八周 项目3 顺序串算法
- 第八周--项目3顺序串算法
- 第八周 项目3 顺序串算法
- 第八周项目3 - 顺序串算法
- 第八周项目3顺序串算法
- 第八周-【项目3-顺序串算法】
- 第八周项目3--顺序串算法
- 第八周项目3-顺序串算法
- 第八周项目3-顺序串算法
- (第八周项目3)顺序串算法
- 第八周项目3-顺序串算法
- 第八周项目3--顺序串算法
- 第八周--项目3-顺序串算法
- 第八周项目3-顺序串算法
- 第八周项目3-顺序串算法
- 第八周项目3-顺序串算法
- 第八周项目3-顺序串算法
- 【第八周项目3-顺序串算法】
- Springboot 之 文件结构和配置文件
- 第22课:<img>标签、表单标签(form)
- NRF51822开发中常见问题和解决办法汇总----持续添加
- Springboot 之 自定义配置文件及读取配置文件
- xstream与resttemplate的联合使用
- 第八周项目3-顺序串算法
- 并发编程基础
- Springboot 之 单元测试
- 从外网远程控制家里的电视盒子,无需设置路由
- 【第六周 项目6-求解8皇后问题的程序】
- Windows 7 Ultra Edit 运行错误 解决方法
- Springboot 之 多配置文件
- POJ 2296Map Labeler 2-sat + 矩阵相交
- Springboot 之 Hibernate自动建表(Mysql)