串的顺序实现
串的顺序结构实现有弊端:
1.串的最大长度固定
2.当串的长度超过MAXSTRLEN时,采用截尾法处理,这种方法不仅在求串的连接时可能发生,还在串的插入,置换也有可能发生.
#include <iostream>
using namespace std;
#define MAXSTRLEN 255 //用户可以在255以内定义最大串长
#define TURE 1
#define FALSE 0
#define ERROR 0
#define OK 1
typedef unsigned char SString[MAXSTRLEN + 1]; //0号单位存字符串的长度
typedef int Status;
//串
/**
**函数功能: 连接串s1和s2如果串s1+s2的长度大于MAXSTRLEN 则返回状态FALSE 否则返回TRUE
**/
Status Concat(SString &T, SString s1, SString s2)
{
//用T返回s1和s2连接的新串,若未截断则返回true,否则返回false
//截断分二种情况:
//s1的长度s1[0] < MAXSTRLEN 而s1[0] + s2[0] > MAXSTRLEN 则表示截断
//s1[0]>=MAXSTRELN
int i, j, flag;
i = j = 1;
if(s1[0] + s2[0] - 2 * '0' <= MAXSTRLEN) //未截断
{
T[0] = s1[0] + s2[0] - '0';
//对串进行复制
//T[1...s1[0]] = s1[1...s1[0]]; T[s1[0] + 1....s2[0] + s1[0]] = s2[1...s2[0]];
while(i <= T[0] - '0' && j <= s1[0] - '0')
T[i++] = s1[j++];
j = 1;
while(i <= T[0] - '0' && j <= s2[0] - '0')
T[i++] = s2[j++];
flag = TURE;
}else if(s1[0] - '0' < MAXSTRLEN)
{
while(j <= s1[0] - '0')
T[i++] = s1[j++];
j = 1;
while(i <= MAXSTRLEN)
T[i++] = s2[j++];
T[0] = MAXSTRLEN;
flag = FALSE;
}else
{
while(i <= MAXSTRLEN)
T[i++] = s1[j++];
T[0] = MAXSTRLEN;
flag = FALSE;
}
return flag;
}
/**
**函数功能:求子串,用sub返回串s的第pos个字符起长度为len的子串
**参数: sub:返回的子串
** s: 获取的串
** pos: 起始位置 1<= pos <= s[0]
** len:长度 0<= len <= s[0] - pos + 1
**/
Status subString(SString &sub, SString s, int pos, int len)
{
int i;
if(pos < 1 || pos > s[0] - '0' || len < 0 || len > s[0]- '0' - pos + 1)
return ERROR;
sub[0] = len + '0';
for(i = pos; i < pos + len; i++)
sub[i - pos + 1] = s[i];
return OK;
}
int main()
{
SString s1 = "4abcd";
SString s2 = "5efghi";
SString T;
//Concat(T, s1, s2);
subString(T, s2, 1, 4);
cout<<&T[1]<<endl;
return 0;
}
分享到:
相关推荐
数据结构课程中动态顺序串相关操作的实现。
数据结构-顺序串基本操作实验报告.pdf数据结构-顺序串基本操作实验报告.pdf数据结构-顺序串基本操作实验报告.pdf数据结构-顺序串基本操作实验报告.pdf数据结构-顺序串基本操作实验报告.pdf数据结构-顺序串基本操作...
java模拟栈实现回文串的判断,适合新手学习!
C语言实现字符串的操作,这里给出的资源是实现的源代码,读者可以参照代码加以修改,若有修改意见请联系本文博主一起商讨。代码都是基于C语言。
10数据结构串顺序表实现功能.cpp
顺序栈实现括号配对
串的顺序存储操作动画演示
本程序以输入下述8个国家名字的字符串为例,讲述字典排序的方法。 如:CHINA、JAPAN、KOREA、INDIA、CANADA、AMERICAN、ENGLAND和FRANCE,将这些国名按字典顺序排序。
数据结构中的——串问题。VC6.0下调试通过。
实现串赋值、串比较、求串长、串联接以及求子串这5种基本操作。 能利用上述实现的基本操作完成置换Replace (&S, T, V)以及从串中删除一段子串StrDelete(&S,pos,len)的操作。
熟悉串的七种基本操作的定义,并能利用这些基本操作实现串的其他各种操作的方法;熟悉掌握在串的定长顺序存储结构上实现串操作的方法 本程序可以在98/2000/XP下运行,可以用VC++6.0执行
顺序串的基本操作,增删插改等,用了数据结构的顺序存储,当然效率可能不高,但主要是熟悉数据结构已经串
用C实现,数据结构线性表的顺序和链式实现.
实现串的定长顺序存储表示的基本操作。并用主程序进行多次验证。 2. 设s='abcdefghijk'、t='cde'为两个字符串,利用定长顺序存储结构的串操作,判断 t是否为s的子串。如果是,输出子串所在位置(第一个字符)。编程...
使用字符串与数组排序技术,编写一个按照字母表顺序排列字符串列表的application。允许用户在文本区中输入字符串。在文本区域中显示结果。
今天聊的是字符串顺序打乱函数str_shuffle。这个函数本身使用频率并不高。但是,其内部实现还是非常有趣的。 str_shuffle() 函数随机地打乱字符串中的所有字符。 要注意,打乱的是字符串中的“字符” 一个字母...
掌握串的基本处理操作和几种不同的存储结构(定长顺序存储表示、堆分配存储表示和块链存储表示)。 二、 实验要求 1、 实现串赋值、串比较、求串长、串联接以及求子串这5种基本操作。 2、 能利用上述实现的基本操作...
大连理工大学数据结构上机题设计strcmp(s,t)算法,实现两个字符串s和t的比较设计strcmp(s,t)算法,实现两个字符串s和t的比较
源码通过脚本组件对象,脚本语言VBScript,StrReverse方法来实现字符串取反功能。@易语言学习论坛。
输入三个整数,按由小到大的顺序输出,然后将程序改为:输入三个字符串, 按由小到大的顺序输出。