串的顺序实现
串的顺序结构实现有弊端:
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;
}
分享到:
相关推荐
在实现动态顺序串时,还需要注意一些关键点,例如错误处理(如插入或删除时越界)、内存管理(避免内存泄漏)以及效率优化(如合理选择扩容策略)。在实际编程中,可能会使用高级数据结构,如C++中的`std::vector`或...
在本实验报告中,主要探讨了如何在C++环境中实现顺序串的各种基本操作,包括串的赋值、复制、计算长度、判断相等、连接、求子串、插入、删除、替换以及输出和判断空串等操作。以下是对这些操作的详细说明: 1. **串...
顺序存储方式是最常见的字符串存储方法,因为它简单且易于实现。 首先,我们需要理解什么是串的顺序存储。在顺序存储结构中,字符串中的每个字符在内存中占据一个连续的位置。例如,如果有一个字符串 "Hello",在...
C语言实现字符串的操作,这里给出的资源是实现的源代码,读者可以参照代码加以修改,若有修改意见请联系本文博主一起商讨。代码都是基于C语言。
10数据结构串顺序表实现功能.cpp
初始化串可以通过直接赋值或动态分配内存来实现。例如: ```c char str[] = "Hello, World!"; ``` 2. **复制串**: 使用`strcpy()`函数可以复制一个字符串到另一个字符串。例如: ```c char dest[50]; ...
本主题将探讨如何使用Java语言通过模拟顺序栈来判断一个字符串是否为回文串。这个方法对于初学者来说是很好的实践,因为它涉及到基础的数据结构——栈,以及字符串处理技巧。 首先,我们需要理解栈(Stack)这种...
顺序串是指在内存中连续存储的字符序列,它的实现简单,操作直观,适合进行一些基础的字符串操作。 顺序串的基本操作包括插入、删除、查找等。在插入操作中,如果串已满,则需要考虑扩容;删除操作通常涉及移动元素...
顺序串的实现可以通过C语言来实现,下面是顺序串的实现代码: ```c #include #include #include #define MAXSIZE 100 #define NULL 0 typedef struct pointnode { int tag; char *t; } pnode; void Init_...
顺序栈实现括号配对 在计算机科学中,括号配对是指在一个表达式中,各种括号之间的匹配关系。例如,在一个数学表达式中,我们可以使用小括号、中括号和大括号来表示不同的操作优先级。然而,在实际应用中,我们需要...
标题中的任务是“按照字符串顺序从小到大排序,删除重复字符”,这通常是一个字符串处理的问题,涉及到了排序算法和字符数组的操作。在这个问题中,我们可以看到一个简单的C语言程序实现,它使用冒泡排序对字符串中...
### C语言实现字典顺序排序 #### 背景与目的 在计算机科学中,排序是一种常见的操作,用于将一组数据按照一定的顺序排列。本文档介绍了一个简单的C语言程序,该程序通过字典顺序(即字母顺序)对一组国家名称进行...
在本例中,我们将探讨如何利用VBScript创建对象并使用StrReverse方法来实现字符串顺序的反转功能。这个技术常用于简单的自动化任务或者在网页交互中,尤其是在早期的ASP(Active Server Pages)开发中。 首先,让...
本项目中,模版类被用来实现两种常见的数据结构——顺序栈和链栈,这两种栈都遵循后进先出(LIFO)的原则。下面我们将详细探讨这些知识点。 首先,**顺序栈**是基于数组实现的栈。在C++中,可以定义一个名为`...
以上就是实现"按照字母表顺序排列字符串列表"的主要步骤和技术要点。通过这个应用,开发者可以学习到Java集合、输入/输出、排序算法以及图形用户界面的基本知识。通过不断练习,这些基础将有助于构建更复杂的Java...
在本文件中,我们看到一个顺序存储字符串(seqstring)的结构体定义以及一系列与字符串操作相关的函数,包括创建、插入、删除、连接、获取子串以及比较字符串。 首先,`seqstring`结构体包含了两个成员:一个最多能...
在这个程序中,我们使用了顺序存储结构来存储串,即将串存储在一个连续的内存块中。这是一种简单和高效的存储结构,但它也存在一些缺陷,如插入和删除操作的效率较低。在实际应用中,我们可以根据具体情况选择合适的...
顺序串的模式匹配是计算机科学中字符串处理的一个重要问题,主要应用于文本检索、数据分析等领域。在给定的实验中,我们需要实现一个简单的模式匹配算法,用于判断一个模式串(Pattern)是否存在于主串(Main String...
在本文中,我们将深入探讨如何使用C语言实现一个顺序表来统计单词的出现频率。顺序表是一种基础的数据结构,它将元素存储在一个连续的内存区域中,通过索引来访问元素,具有简单直观的操作方式。 首先,我们需要...