数据结构串的操作实例详解
什么是数据结构串?
数据结构串是由若干个字符按照一定的顺序排列而成的线性结构。可以对串进行许多操作,如子串的截取、串的连接、串的替换等等。
数据结构串的基本操作
串的初始化
为了操作一个串,我们需要先定义一个串并初始化,可以通过以下代码实现:
#include <stdio.h>
#define MAXSIZE 100 //串的最大长度
typedef struct {
char data[MAXSIZE+1]; //串的字符数组,因为从0开始存放,所以加1
int length; //串的实际长度
} SqString;
int StrInit(SqString *s, char str[]) {
int i;
for(i = 0; str[i] != '\0' && i < MAXSIZE; i++) {
s->data[i] = str[i];
}
s->length = i;
if(i > MAXSIZE) {
return 0; //表示初始化失败
}
else {
return 1; //表示初始化成功
}
}
// 示例1
char str[] = "Hello, World!";
SqString s;
StrInit(&s, str);
串的清空
当不需要一个串时,可以通过清空来释放相应的空间,可以通过以下代码实现:
int StrClear(SqString *s) {
s->length = 0;
return 1;
}
// 示例2
SqString s;
StrInit(&s, "Hello, World!");
StrClear(&s);
串的比较
在某些场合下,需要比较两个串的大小,可以采用以下代码实现:
int StrCompare(SqString s1, SqString s2) {
int i;
for(i = 0; i < s1.length && i < s2.length; i++) {
if(s1.data[i] < s2.data[i]) {
return -1;
}
else if(s1.data[i] > s2.data[i]) {
return 1;
}
}
if(i == s1.length && i == s2.length) {
return 0;
}
else if(i == s1.length) {
return -1;
}
else {
return 1;
}
}
// 示例3
SqString s1, s2;
StrInit(&s1, "Hello");
StrInit(&s2, "World");
int result = StrCompare(s1, s2);
printf("%d\n", result);
数据结构串的操作实例
串的截取
假设有一个字符串str,需要截取出它的前5个字符,我们可以通过以下代码实现:
SqString s1, s2;
StrInit(&s1, "Hello, World!");
int len = 5;
for(int i = 0; i < len; i++) {
s2.data[i] = s1.data[i];
}
s2.length = len;
或者可以采用以下递归函数实现:
int SubString(SqString *sub, SqString s, int start, int len) {
if(start < 1 || start > s.length || len < 0 || start + len - 1 > s.length) {
return 0; //表示截取失败
}
for(int i = start - 1, j = 0; j < len; i++, j++) {
sub->data[j] = s.data[i];
}
sub->length = len;
return 1; //表示截取成功
}
// 示例4
SqString s1, s2;
StrInit(&s1, "Hello, World!");
SubString(&s2, s1, 1, 5);
串的连接
假设有两个字符串s1和s2,需要将它们连接成一个新的字符串,可以通过以下代码实现:
int StrConcat(SqString *s1, SqString s2) {
if(s1->length + s2.length > MAXSIZE) {
return 0; //表示连接失败
}
for(int i = 0; i < s2.length; i++) {
s1->data[s1->length + i] = s2.data[i];
}
s1->length += s2.length;
return 1; //表示连接成功
}
// 示例5
SqString s1, s2;
StrInit(&s1, "Hello");
StrInit(&s2, ", World!");
StrConcat(&s1, s2);
串的替换
假设有一个字符串s,需要将其中的所有小写字母替换为大写字母,可以通过以下代码实现:
void StrReplace(SqString *s) {
for(int i = 0; i < s->length; i++) {
if(s->data[i] >= 'a' && s->data[i] <= 'z') {
s->data[i] += ('A' - 'a');
}
}
}
// 示例6
SqString s;
StrInit(&s, "Hello, World!");
StrReplace(&s);
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:数据结构串的操作实例详解 - Python技术站