C语言中,可以使用数组实现串的顺序存储表示。下面是实现串的顺序存储表示和基本操作的攻略:
串的顺序存储表示
串的顺序存储表示可以借助于字符数组来实现,数组元素存储的是串中字符的ASCII码。数组中每一个元素表示一个字符。为了标识串的结束,我们可以在串的末尾增加一个特殊的字符'\0',称为“串结束符”。
#define MAXSIZE 100 //定义字符数组的最大长度
typedef struct {
char ch[MAXSIZE]; //存储串中字符的数组
int length; //串的长度
}SqString;
串的基本操作
StrAssign
该函数是将一个字符串赋值给一个顺序存储的串。函数主要的操作就是通过循环遍历字符数组,逐一赋值给顺序存储的串。
void StrAssign(SqString *s, char str[]) {
int i = 0;
while (str[i] != '\0') {
s->ch[i] = str[i];
i++;
}
s->length = i;
}
StrLength
该函数是用来求一个顺序存储的串的长度,也就是字符数组的长度。
int StrLength(SqString s) {
return s.length;
}
StrCompare
该函数用于比较两个顺序存储的串的大小,其返回值的规则和strcmp函数类似。
int StrCompare(SqString s1, SqString s2) {
int i;
for (i = 0; i < s1.length && i < s2.length; ++i) {
if (s1.ch[i] != s2.ch[i]) {
return s1.ch[i] - s2.ch[i];
}
}
return s1.length - s2.length;
}
示例说明
示例1
下面代码是使用上述顺序存储的串来实现字符串的赋值和输出的操作。
#include <stdio.h>
//定义字符数组的最大长度
#define MAXSIZE 100
//定义顺序存储的串数据结构
typedef struct {
char ch[MAXSIZE];
int length;
}SqString;
//字符串赋值
void StrAssign(SqString *s, char str[]) {
int i = 0;
while (str[i] != '\0') {
s->ch[i] = str[i];
i++;
}
s->length = i;
}
//字符串输出
void StrPrint(SqString s) {
for (int i = 0; i < s.length; i++) {
printf("%c", s.ch[i]);
}
printf("\n");
}
int main() {
SqString s; //定义一个顺序存储的串
char str[] = "hello world";
StrAssign(&s, str); //赋值操作
StrPrint(s); //输出操作
return 0;
}
该代码会输出:"hello world"
示例2
下面代码是使用上述顺序存储的串来实现字符串比较操作。
#include <stdio.h>
//定义字符数组的最大长度
#define MAXSIZE 100
//定义顺序存储的串数据结构
typedef struct {
char ch[MAXSIZE];
int length;
}SqString;
//字符串赋值
void StrAssign(SqString *s, char str[]) {
int i = 0;
while (str[i] != '\0') {
s->ch[i] = str[i];
i++;
}
s->length = i;
}
//字符串比较
int StrCompare(SqString s1, SqString s2) {
int i;
for (i = 0; i < s1.length && i < s2.length; ++i) {
if (s1.ch[i] != s2.ch[i]) {
return s1.ch[i] - s2.ch[i];
}
}
return s1.length - s2.length;
}
int main() {
SqString s1, s2; //定义两个顺序存储的串
char str1[] = "hello";
char str2[] = "world";
StrAssign(&s1, str1); //赋值操作
StrAssign(&s2, str2);
int result = StrCompare(s1, s2); //比较操作
if (result == 0) {
printf("s1 is equal to s2\n");
} else if (result > 0) {
printf("s1 is greater than s2\n");
} else {
printf("s1 is less than s2\n");
}
return 0;
}
该代码会输出:"s1 is greater than s2",因为's'的ASCII码大于'd'的ASCII码。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言实现串的顺序存储表示与基本操作 - Python技术站