定长顺序串的基本操作

来源:互联网 发布:吐槽电影网络节目 编辑:程序博客网 时间:2024/05/22 03:26

定长顺序串采用的是数组方法进行存储,空间分配一次完成,可以实行如下的基本操作

#include <iostream>#include <cstring>using namespace std;#define MAXSTRLEN 200#define TRUE 1#define FALSE 0#define  OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2typedef unsigned char sstring[MAXSTRLEN + 1];int strassig(sstring &T, char chars[])//赋值操作 {int i;if (strlen(chars)>MAXSTRLEN)return ERROR;else{T[0] = strlen(chars);for (i = 0; i<strlen(chars); i++)T[i + 1] = chars[i];}return OK;}int strcopy(sstring &T, sstring s)//拷贝字符串 {if (s[0]>MAXSTRLEN)return ERROR;else{for (int i = 0; i <= s[0]; i++)T[i] = s[i];}return OK;}int strempty(sstring s)//判空操作 {if (s[0] == 0)return OK;elsereturn ERROR;}int strcompare(sstring s, sstring T)//比大小 {int i;for (i = 1; i <= s[0] && i <= T[0]; i++)if (s[i] != T[i])return (s[i] - T[i]);return (s[i] - T[i]);}int strlength(sstring s)//串长 {return s[0];}void clearstring(sstring &s)//清空字符串 {s[0] = 0;s[1] = '\0';}void concat(sstring &T, sstring s1, sstring s2)// 连接两个字符串 {int i, j, uncut;if (s1[0] + s2[0] <= MAXSTRLEN){for (i = 1; i<s1[0]; i++)T[i] = s1[i];for (j = 1; j<s2[0]; j++)T[i + j] = s2[j];T[0] = s1[0] + s2[0];}else if (s1[0]<MAXSTRLEN){for (i = 1; i<s1[0]; i++)T[i] = s1[i];for (j = 1; j<MAXSTRLEN - s1[0]; j++)T[i + j] = s2[j];T[0] = s1[0] + j;}else if (s1[0] == MAXSTRLEN){for (i = 1; i<s1[0]; i++)T[i] = s1[i];T[0] = s1[0];uncut = FALSE;}}int substring(sstring &sub, sstring s, int pos, int len)//求子串 {if (pos<1 || pos>s[0] || len<0 || len>s[0] - pos + 1)return ERROR;for (int i = 1; i <= len; i++)sub[i] = s[pos - 1 + i];sub[0] = len;return OK;}int strinsert(sstring &s, int pos, sstring T)//插入 {int i;if (s[0] + T[0] <= MAXSTRLEN){for (i = s[0]; i >= pos; i--)s[i + T[0]] = s[i];for (i = pos; i<pos + T[0]; i++)s[i] = T[i - pos + 1];s[0] = s[0] + T[0];return TRUE;}else return ERROR;}void strdelete(sstring &s, int pos, int len)//删除 {if (s[0] - pos >= len){for (int i = pos; i <=s[0]-len; i++){s[i] = s[i + len];}s[0] = s[0] - len;}else if (s[0] - pos < len){s[pos] = '\0';s[0] = pos - 1;}}void shuchu(sstring s){for (int i = 1; i <= s[0]; i++)cout << s[i];cout << endl;}int main(){int i, m, n;sstring T, s, sub;char chars1[11] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j' };char chars2[11] = { 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't' };strassig(T, chars1);cout << "将chars1的值赋予T:";shuchu(T);cout << "字符串的长度为:" << strlength(T) << endl;cout << "将chars2的值赋予s:";strassig(s, chars2);shuchu(s);cout << "判断T与s的大小:";if (strcompare(s, T) == 0)cout << 's' << '=' << 'T' << endl;else if (strcompare(s, T) < 0)cout << 's' << '<' << 'T' << endl;else if (strcompare(s, T) > 0)cout << 's' << '>' << 'T' << endl;cout << "将字符串T和s连接起来:";concat(T, T, s);shuchu(T);cout << "将s的值赋予T:";strcopy(T, s);shuchu(T);cout << "判断字符串T是否为空:";if (strempty(T) == 1)cout << "字符串为空" << endl;else if (strempty(T) == 0)cout << "字符串不为空" << endl;cout << "请输入m,n,并求字符串T中第m个字符以后长度为n的字符子串:" << endl;cin >> m;cin >> n;cout << "字符子串为:";substring(sub, T, m, n);shuchu(sub);cout << "输入m" << endl;cin >> m;cout << "将chars1的值赋予s,并在串s的第m个字符之前插入串T" << endl;strassig(s, chars1);strinsert(s, m, T);cout << "输出新串:";shuchu(s);cout << "请输入m,n,并删除字符串s中第m个元素以后长度为n的子串" << endl;cin >> m;cin >> n;cout << "输出新串:";strdelete(s, m, n);shuchu(s);system("pause");return 0;}


0 0
原创粉丝点击