c语言:定长顺序串的基本操作实实现
来源:互联网 发布:linux下载整个文件夹 编辑:程序博客网 时间:2024/05/18 16:37
// 串的定长顺序存储实现.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include<iostream>#include<stdio.h>#include<string>#include<iomanip>#define STRING_SIZE 255using namespace std;typedef unsigned char SString[STRING_SIZE + 1];//函数声明部分void Error(char *s); //错误处理函数void Strassign_string(SString &S, char chars[]); //赋值函数void Clear_string(SString &s); //清空函数void Destroy_string(SString &S); //销毁函数int Getlength_string(SString &s); //得到定长顺序串的长度int Compare_string(SString &s, SString &t); //比较两个订场顺序串的大小void Concat_string(SString &t, SString &s1, SString &s2); //连接两个顺序串void Substring_string(SString &sub, SString &s, int pos, int len); //得到主串的子串void Insert_string(SString &S, SString &T, int pos); //插入函数void Delete_string(SString &S, int t, int pos); //删除函数//函数实现部分void Error(char *s) //错误处理函数{cout << s << endl;exit(1);}/*赋值算法设计:1、先计算待赋值顺序串的长度;2.如果待赋值字符串的长度为0,则将主串设置为空串3.在待赋值字符串长度不为零的情况下,如果长度大于申请的空间,将发生截断现象,给出截断提示如果长度小于等于申请的空间,不发生截断现象*/void Strassign_string(SString &S, char chars[]) //赋值函数{int i = 0;int chars_length = 0; //初始值设为0while (chars[i] != '\0') //计算待赋值串的长度{chars_length++; i++;}if (!chars_length) S[0] = 0;else{int j = 1;int k = 0;if (chars_length > STRING_SIZE){while(j<=STRING_SIZE){S[j++] = chars[k++];}S[0] = STRING_SIZE;cout << "串常量长度大于给定空间,赋值发生截断!" << endl;}else{while (j <= chars_length){S[j++] = chars[k++];}S[0] = chars_length;}}}void Clear_string(SString &s) //清空函数{s[0] = 0;}void Destroy_string(SString &S) //销毁函数{for (int i = 1; i <= S[0]; i++){delete &S[i];}delete &S[0];}int Getlength_string(SString &s) //得到定长顺序串的长度{return s[0];}/*定长顺序串的大小比较算法设计:以此比较串1和串1对应位置上的字符1.如果串1大于串2,返回正数;2.如果串1等于串2,返回0;3,如果串1小于串2,返回负数*/int Compare_string(SString &s, SString &t) //比较两个定长顺序串的大小{for (int i = 1; (i <= s[0]) && (i <= t[0]); i++){if (s[i] != t[i])return (s[i] - t[i]);elsereturn (s[0] - t[0]);}}/*连接两个定长顺序串的算法设计:基于定产顺序串S1和S2的连接操作,对超过预定义空间的部分需要实施截断操作。基于S1和s2长度的不同,连接时可能有以下四种情况:1.S1[0]+S2[0]<=STRING_SIZE,则得到的串是正确的串;2.S1[0]+S2[0]>STRING_SIZE,且S1[0]<STRING_SIZE,则得到的串是S1的全串,S2的部分,S2将发生截断;3.S1[0]=STRING_SIZE,则得到的串是S1串;4.S1[0]>STRING_SIZE,则得到的串是S1的部分,S1将发生截断;*/void Concat_string(SString &t, SString &s1, SString &s2)//连接两个顺序串{if ((s1[0] + s1[0]) <= STRING_SIZE){int j = 1;int k = 1;while (j <= s1[0]){t[k++] = s1[j++];}j = 1;while (j <= s2[0]){t[k++] = s2[j++];}t[0] = s1[0] + s2[0];cout << "正确连接,没有发生截断!" << endl;}else if ((s1[0]) <= STRING_SIZE){int j = 1;int k = 1;while (j <= s1[0]){t[k++] = s1[j++];}j = 1;while (j <= s2[0]){t[k++] = s1[j++];}t[0] = STRING_SIZE;cout << "未正确连接,S2发生截断!" << endl;}else if ((s1[0])== STRING_SIZE){int j = 1;int k = 1;while (j <= s1[0]){t[k++] = s1[j++];}t[0] = STRING_SIZE;cout << "未正确连接,S2没有连接上!" << endl;}else {int j = 1;int k = 1;while (j <= s1[0]){t[k++] = s1[j++];}t[0] = s1[0];cout << "未正确连接,S1发生截断现象!" << endl;}}void Substring_string(SString &sub, SString &s, int pos, int len) //得到主串的子串{if ((pos<1) || (pos>s[0]) || (len < 0) || (len>(s[0] - pos + 1)))Error("参数输入错误,请再次输入!");for (int i = 1; i <= len; i++){sub[i] = s[pos + i - 1];}sub[0] = len;}void Insert_string(SString &S, SString &T, int pos)//将子串插入到主串pos位置后{if ((S[0] + T[0]) <= STRING_SIZE){int j = 0;for (int i = (S[0]+T[0]); i >= pos; i--) //将主串从后往前移动,腾出子串的位置{ S[i] = S[S[0] - j];j++;}j = 1;for (int i = pos; i < (pos + T[0]); i++) //将子串插入到pos位置起的部分{S[i] = T[j];j++;}S[0] = S[0] + T[0];}} void Delete_string(SString &S, int t, int pos) //从主串中pos位置起删除t个字符{ for (int i = pos; i < (S[0] - pos + 1); i++){S[i] = S[i+t];}S[0] = S[0] - t;}int _tmain(int argc, _TCHAR* argv[]){char a[50] = { "abc" };SString S1;Strassign_string(S1, a);cout << "串S1的长度是:" << Getlength_string(S1) << endl;char b[50] = { "ABCDEFGHIJKLMN"};SString S2;Strassign_string(S2, b);cout << "串S2的长度是:" << Getlength_string(S2) << endl;cout << "比较字符串的结果是:" << Compare_string(S1, S2) << endl;Insert_string(S2, S1, 3);cout << "插入后的字符串是:";for (int i = 1; i <= S2[0]; i++){cout << S2[i];}cout << endl;Delete_string(S2, 3, 2);cout << "删除后的字符串是:";for (int i = 1; i <= S2[0]; i++){cout << S2[i];}cout << endl; SString S3;Concat_string(S3, S1, S2);cout<<"连接后的字符串长度是:" << Getlength_string(S3) << endl;cout << "连接后的字符串是:";for (int i = 1; i <= S3[0]; i++){cout << S3[i];}cout << endl;SString S4;Substring_string(S4, S3, 3, 5);cout << "取出的子串是:";for (int i = 1; i <= S4[0]; i++){cout << S4[i];}cout << endl;return 0;}
0 0
- c语言:定长顺序串的基本操作实实现
- 定长顺序串的基本操作
- 串采用定长顺序存储结构的基本操作
- 串采用定长顺序存储结构的基本操作
- 定长的顺序表及基本操作
- 串的定长顺序存储及其应用 C语言
- 串的定长顺序存储C语言实现
- 定长串的基本操作
- 数据结构c语言实现定长顺序串
- 自适应LMS算法的C语言时实实现
- 串的定长顺序存储结构:实现串的基本操作Replace(&S,T,V)
- C语言顺序表的基本操作
- C语言顺序栈的基本操作
- 定长顺序串一些操作
- (C语言)串定长顺序存储实现(数据结构十二)
- 数据结构(C语言)读书笔记10:串的定长顺序存储表示
- C语言数据结构——串的定长顺序存储结构
- C语言数据结构——串的定长顺序存储结构
- java char String中涉及到的length字符长度概念的研究
- 51nod Huffman算法
- 200. Number of Islands
- MAC下myeclipse 的Console乱码解决
- 【杭电oj】3789 - 奥运排序问题(排名,坑题)
- c语言:定长顺序串的基本操作实实现
- UVA 11082 Matrix Decompressing(网络流)
- 【笔试/面试】MFC(五)
- 李煜-问君能有几多愁
- SGU 149 Computer Network(树形DP)
- org.springframework.beans.factory.BeanCreationException
- 深入研究java.lang.Class类
- 新人报道
- 拒绝javascript 模拟 只用CSS美化选择框