严蔚敏 数据结构习题 C语言 4.10~4.13
来源:互联网 发布:ppt软件学习 编辑:程序博客网 时间:2024/06/05 04:54
今天忙了一大堆的事后,脑子突然短路了,各种小问题找了N久,现在感觉要爆肝了,比看到听到某人自称宝宝更不好(°ο°)~@ 晕倒了..
不多说,上代码~
#include <iostream>#include <stdlib.h>#include <math.h>#include <string.h>#include <stdio.h>using namespace std;#define ok 1#define error 0#define true 1#define false 0#define overflow -1//#define stack_init_size 100//#define stack_increment 10typedef int status;#define maxsize 255typedef char sstring[maxsize + 1];status sassign(sstring &s, char *ch){ int i = 0; char *p = ch; while (i < maxsize && *p) { s[++i] = *p++; } s[0] = i; if (*p) { return error; } else { return ok; }}void strassign(sstring &T, sstring S){ int i; for (i = 0; i <= S[0]; i++) { T[i] = S[i]; }}void strcpy(sstring &t, sstring s){ int i; for (i = 0; i <= s[0]; i++) { t[i] = s[i]; }}int strcompare(sstring s, sstring t){ int i = 1; while (i <= s[0] && i <= t[0] && s[i] == t[i]) { i++; } if (i <= s[0]) if (i <= t[0]) { return s[i] - t[i]; } else { return s[i]; } else if (i <= t[0]) { return -t[i]; } else { return 0; }}status concat(sstring &t, sstring s1, sstring s2){ int i, j; for (i = 1; i <= s1[0]; i++) { t[i] = s1[i]; } if (s1[0] + s2[0] <= maxsize) { for (j = 1; j <= s2[0]; j++) { t[i++] = s2[j]; } t[0] = s1[0] + s2[0]; return ok; } else { for (j = 1; j <= maxsize - s1[0]; j++) { t[i++] = s2[j]; } t[0] = maxsize; return error; }}status substring(sstring &sub, sstring s, int pos, int len){ int i; if (pos < 1 || pos > s[0] || len < 0 || len > s[0] - pos + 1) { return error; } for (i = 1; i <= len; i++) { sub[i] = s[pos + i - 1]; } sub[0] = len; return ok;}void putdata(sstring s){ int i; printf("\n"); for (i = 1; i <= s[0]; i++) { printf("%c", s[i]); }}/*4.10*/void strreverse(sstring &s, sstring r) //求r的逆s{ int i; sstring a, b, c; strassign(s, ""); for (i = r[0]; i > 0; i--) { substring(a, r, i, 1); strassign(b, a); concat(c, s, b); strassign(s, c); }}/*4.11*/int ak[maxsize];int substract(sstring s, sstring t, sstring &r){ int i, j = 1, k = 1,q=1; sstring a, b, d,e; memset(ak, -1, sizeof(a)); sstring c; sassign(a, " "); sassign(b, " "); sassign(c, " "); sassign(d, " "); for (i = 1; i <= s[0]; i++) { substring(c, s, i, 1); substring(a, s, 1, 1); for (j = 1; j < i && strcompare(c, a);) /*判断s的当前字符c(其实是字符串)是否第一次出现*/ { j++; //printf("%d\n",j); substring(a, s, j, 1); } if (i == j) { substring(b, t, 1, 1); for (k = 1; k <= t[0] && strcompare(c, b);) /*是否在t中出现*/ { k++; substring(b, t, k, 1); } if (k > t[0]) { concat(d, r, c); strassign(r, d); //putdata(r); ak[q++]=j; } } } //printf("%d",ak[q-1]); q--; return q;}/*4.12*/int Replace(sstring &s, sstring t, sstring v){ int n, i; sstring head, tail, a, b; sassign(b, ""); sassign(a, ""); sassign(head, ""); sassign(tail, ""); for (n = 0, i = 1; i <= s[0] - t[0] + 1; i++) { substring(a, s, i, t[0]); if (!strcompare(a, t)) { substring(head, s, 1, i - 1); substring(tail, s, i + t[0], s[0] - t[0] - i + 1); concat(b, head, v); concat(s, b, tail); i += v[0]; n++; } } return n;}/*4.13*/int Delete(sstring &s, sstring t){ int n, i; sstring head, tail, a, b; sassign(b, ""); sassign(a, ""); sassign(head, ""); sassign(tail, ""); for (n = 0, i = 1; i <= s[0] - t[0] + 1; i++) { substring(a, s, i, t[0]); if (!strcompare(a, t)) { substring(head, s, 1, i - 1); substring(tail, s, i + t[0], s[0] - t[0] - i + 1); concat(s, head, tail); n++; } } return n;}int main(){ int o,p,q,i; printf("**********************************************\n"); sstring r, s, v, k; sstring a, b, c; printf("4.10\n"); sassign(r, "I am a ACMer"); printf("原串:"); putdata(r); strreverse(s, r); printf("\n逆串:"); putdata(s); printf("\n**********************************************\n"); printf("4.11\n"); sassign(k, "I am a ACMer"); printf("串1:"); putdata(k); printf("\n串2:"); sassign(v, "ACMer"); putdata(v); sassign(c, ""); printf("只在串1出现不在串2中的字符:"); o=substract(k, v, c); putdata(c); printf("\n各字符第一次出现的位置分别为:\n"); for(i=1;i<=o;i++) { printf("%d ",ak[i]); } printf("\n**********************************************\n"); printf("4.12\n"); printf("原串:"); putdata(r); printf("\n将“ACMer”替换成“bird”"); sassign(a, "ACMer"); sassign(b, "bird"); printf("\n改变后:"); Replace(r, a, b); putdata(r); printf("\n**********************************************\n"); printf("4.13\n"); sassign(r, "I am a ACMer"); printf("原串:"); putdata(r); printf("\n将“ACMer”删除"); sassign(a, "ACMer"); printf("\n改变后:"); Delete(r, a); putdata(r); printf("\n**********************************************\n"); return 0;}
0 0
- 严蔚敏 数据结构习题 C语言 4.10~4.13
- 数据结构---习题(C++)
- 数据结构 c 习题
- C语言试卷习题
- C语言习题1
- c语言习题
- c语言习题
- c语言习题
- C语言习题
- C语言习题整理
- c语言习题
- C语言习题练习
- C语言习题
- c语言学习习题
- C语言习题一
- C语言习题二
- C语言习题三
- C语言习题四
- LoadRunner检查点使用小结
- Android学习——服务Service与广播接收者BroadcastReciver
- DiscreteSeekBar是一个Material Design风格的、带有气泡指示器的拖动条。可以自定义样式,非常不错的东西
- gct
- Tomcat、JBOSS、WebSphere、WebLogic、Apache之间的区别
- 严蔚敏 数据结构习题 C语言 4.10~4.13
- 详细学习线性布局(2)
- AJAX详解
- SpringMVC 入门一
- HDU 1075 What Are You Talking About // 字符串映射,Trie
- Cookie和Session
- 国内外最流行App的移动端技术浅析(新闻类App)
- 聊聊gcc参数中的-I, -L和-l
- JSP技术