c语言编写一个程序实现顺序串的各种基本运算
时间: 2023-06-06 21:05:04 浏览: 68
好的,这个问题属于计算机科学,我可以回答。顺序串基本运算包括串的初始化、串的清空、串的复制、串的连接、串的比较、求串的长度、取子串等。可以使用C语言中的字符数组来实现顺序串。您可以参考C语言相关教程或文献来学习实现顺序串的基本运算。
相关问题
c语言编写一个程序实现顺序串的各种基本运算的代码
好的,我可以帮您回答这个问题。以下是 C 语言编写的实现顺序串的各种基本运算的代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100 //定义最大串长
typedef struct {
char data[MAXSIZE]; //存储串的数组
int length; //串的长度
} SqString; //定义顺序串结构体
//初始化空串
void InitString(SqString *s) {
s->length = 0;
}
//判断字符串是否为空
int isEmpty(SqString s) {
return s.length == 0;
}
//获取字符串长度
int StrLength(SqString s) {
return s.length;
}
//串复制
void StrCopy(SqString *s, SqString t) {
int i;
for (i = 0; i < t.length; i++) {
s->data[i] = t.data[i];
}
s->length = t.length;
}
//串连接
void StrConcat(SqString *s, SqString t) {
int i;
for (i = 0; i < t.length; i++) {
s->data[s->length + i] = t.data[i];
}
s->length += t.length;
}
//比较字符串
int StrCompare(SqString s, SqString t) {
int i;
for (i = 0; i < s.length && i < t.length; i++) {
if (s.data[i] != t.data[i]) {
return s.data[i] - t.data[i];
}
}
return s.length - t.length;
}
//取子串
SqString SubString(SqString s, int pos, int len) {
SqString str;
InitString(&str);
if (pos < 1 || pos > s.length || len < 0 || len > s.length - pos + 1) {
printf("参数不合法\n");
exit(0);
}
int i;
for (i = pos - 1; i < pos + len - 1; i++) {
str.data[i - pos + 1] = s.data[i];
}
str.length = len;
return str;
}
//插入子串
void StrInsert(SqString *s, int pos, SqString t) {
if (pos < 1 || pos > s->length + 1) {
printf("插入位置非法\n");
exit(0);
}
int i;
for (i = s->length - 1; i >= pos - 1; i--) {
s->data[i + t.length] = s->data[i];
}
for (i = 0; i < t.length; i++) {
s->data[pos - 1 + i] = t.data[i];
}
s->length += t.length;
}
//删除子串
void StrDelete(SqString *s, int pos, int len) {
if (pos < 1 || pos > s->length || len < 1 || len > s->length - pos + 1) {
printf("参数非法\n");
exit(0);
}
int i;
for (i = pos - 1; i < pos - 1 + len; i++) {
s->data[i] = s->data[i + len];
}
s->length -= len;
}
//输出字符串
void PrintString(SqString s) {
int i;
for (i = 0; i < s.length; i++) {
printf("%c", s.data[i]);
}
printf("\n");
}
//主函数
int main() {
SqString s1, s2, s3;
//初始化字符串 s1
InitString(&s1);
//赋值
s1.length = 5;
s1.data[0] = 'h';
s1.data[1] = 'e';
s1.data[2] = 'l';
s1.data[3] = 'l';
s1.data[4] = 'o';
//输出字符串 s1
printf("s1:");
PrintString(s1);
//判断字符串是否为空
if (isEmpty(s1)) {
printf("s1 is empty.\n");
} else {
printf("s1 is not empty.\n");
}
//获取字符串长度
printf("s1 length = %d\n", StrLength(s1));
//复制字符串
StrCopy(&s2, s1);
printf("s2:");
PrintString(s2);
//连接字符串
s3.length = 3;
s3.data[0] = 'w';
s3.data[1] = 'o';
s3.data[2] = 'r';
printf("s3:");
PrintString(s3);
StrConcat(&s1, s3);
printf("s1 after concatenation:");
PrintString(s1);
//比较字符串
SqString s4;
s4.length = 5;
s4.data[0] = 'h';
s4.data[1] = 'e';
s4.data[2] = 'l';
s4.data[3] = 'l';
s4.data[4] = 'o';
printf("s4:");
PrintString(s4);
if (StrCompare(s1, s4) == 0) {
printf("s1 and s4 are equal.\n");
} else {
printf("s1 and s4 are not equal.\n");
}
//取子串
SqString s5 = SubString(s1, 2, 4);
printf("s5:");
PrintString(s5);
//插入子串
SqString s6;
s6.length = 3;
s6.data[0] = 'o';
s6.data[1] = 'n';
s6.data[2] = 'e';
printf("s6:");
PrintString(s6);
StrInsert(&s1, 2, s6);
printf("s1 after insertion:");
PrintString(s1);
//删除子串
StrDelete(&s1, 4, 4);
printf("s1 after deletion:");
PrintString(s1);
return 0;
}
```
希望我的回答能够帮到您!
用C语言编写一个程序实现顺序栈的各种基本运算
好的,下面是用C语言实现顺序栈的基本运算的代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100 // 定义栈的最大长度
typedef struct {
int data[MAXSIZE]; // 存储栈的数组
int top; // 栈顶指针
} SqStack;
// 初始化栈
void InitStack(SqStack *S) {
S->top = -1;
}
// 判断栈是否为空
int StackEmpty(SqStack S) {
if (S.top == -1) {
return 1; // 栈为空
} else {
return 0; // 栈不为空
}
}
// 判断栈是否已满
int StackFull(SqStack S) {
if (S.top == MAXSIZE - 1) {
return 1; // 栈已满
} else {
return 0; // 栈未满
}
}
// 入栈
int Push(SqStack *S, int x) {
if (StackFull(*S)) {
return 0; // 栈已满,入栈失败
} else {
S->top++; // 栈顶指针加一
S->data[S->top] = x; // 入栈
return 1; // 入栈成功
}
}
// 出栈
int Pop(SqStack *S, int *x) {
if (StackEmpty(*S)) {
return 0; // 栈为空,出栈失败
} else {
*x = S->data[S->top]; // 取出栈顶元素
S->top--; // 栈顶指针减一
return 1; // 出栈成功
}
}
// 获取栈顶元素
int GetTop(SqStack S, int *x) {
if (StackEmpty(S)) {
return 0; // 栈为空,获取失败
} else {
*x = S.data[S.top]; // 取出栈顶元素
return 1; // 获取成功
}
}
int main() {
SqStack S;
InitStack(&S); // 初始化栈
int x; // 定义栈元素
int choice; // 定义操作选择
while (1) {
printf("1.入栈 2.出栈 3.获取栈顶元素 4.退出\n");
scanf("%d", &choice);
switch (choice) {
case 1: // 入栈
printf("请输入要入栈的元素:");
scanf("%d", &x);
if (Push(&S, x)) {
printf("入栈成功!\n");
} else {
printf("入栈失败,栈已满!\n");
}
break;
case 2: // 出栈
if (Pop(&S, &x)) {
printf("出栈成功,出栈元素为:%d\n", x);
} else {
printf("出栈失败,栈已空!\n");
}
break;
case 3: // 获取栈顶元素
if (GetTop(S, &x)) {
printf("栈顶元素为:%d\n", x);
} else {
printf("获取失败,栈为空!\n");
}
break;
case 4: // 退出
exit(0);
default:
printf("输入有误,请重新输入!\n");
break;
}
}
return 0;
}
```
运行程序后可以进行入栈、出栈、获取栈顶元素等操作。