3.1 串--顺序存储
- main.c
//
// main.c
// 11_StackString
//
// Created by ls on 2022/5/24.
// Copyright © 2022 LSC001. All rights reserved.
//
#include "SString.h"
int main() {
SString S;
InitString(S);
char *str = "ABC";
StrAssign(S,str);
SString T;
InitString(T);
StrAssign(T,"12");
StrInsert(S,4,T);
PrintString(S);
//
// SString V;
// InitString(V);
// StrAssign(V,"++");
//
// PrintString(S);
// PrintString(T);
// PrintString(V);
// StrReplace(S,T,V);
// PrintString(S);
// printf("%dn",StrIndex(S,T,3));
// PrintString(S);
// StrDelete(S,4,3);
// PrintString(S);
// printf("%dn",StrCompare(S,T));
// SString T;
// StrCopy(T,S);
// PrintString(S);
// PrintString(T);
// printf("%dn",StrEmpty(S));
// printf("%dn",StrLength(S));
// StrClear(S);
// PrintString(S);
// SString A;
// StrConcat(A,S,T);
// PrintString(A);
// PrintString(T);
// PrintString(S);
// StrClear(S);
// PrintString(S);
// PrintString(S);
// SString T = "12";
//int select=1;
// while(select)
// {
// printf("***********************************************n");
// printf("* [1] StrAssign [2] StrCopy *n");
// printf("* [3] StrEmpty [4] StrCompare *n");
// printf("* [5] StrLength [6] StrConcat *n");
// printf("* [7] SubString [8] StrIndex *n");
// printf("* [9] StrReplace [10] StrInsert *n");
// printf("* [11] StrDelete [11] StrClear *n");
// printf("* [11] PrintString *n");
// printf("***********************************************n");
// printf("请选择:> ");
// scanf("%d",&select);
// if(0 == select)
// break;
//void StrDelete(SString S,int pos,int len); // 11 从pos删除len的字符。
//void StrClear(SString S); // 12
//void PrintString(SString S); // 13
//
// switch (select)
// {
// case 1:
//
// break;
// case 2:
// pop_back(&mystack,&value);
// show_Stack(&mystack);
// break;
// case 3:
// show_Stack(&mystack);
// break;
// case 4:
// printf("Empty: %ldn",isEmpty(mystack));
// break;
// case 5:
// get_top(mystack);
// break;
// case 6:
// printf("length: %ldn",length(mystack));
// break;
// case 7:
// clear0(&mystack);
// break;
// case 8:
// destroy(&mystack);
// break;
// default:
// printf("输入错误!");
// break;
// }
// }
//destroy(&mystack);
printf("Hello, World!n");
return 0;
}
- SString.h
//
// SString.h
// 11_StackString
//
// Created by ls on 2022/5/24.
// Copyright © 2022 LSC001. All rights reserved.
//
#ifndef SString_h
#define SString_h
#include
#include
#include
#include
// 1
#define MAXSTRLEN 30
#define u_char unsigned char
typedef u_char SString[MAXSTRLEN+1];
// 2
void InitString(SString S);
void StrAssign(SString S,char *str); // 1 赋值,
void StrCopy(SString S,SString T); // 2 复制
bool StrEmpty(SString S); // 3 判断字符串是否为空
int StrCompare(SString S,SString T); // 4 比较两个字符串的大小
int StrLength(SString S); // 5 字符串长度
void StrConcat(SString T,SString s1,SString s2); // 6 T=s1+s2
void SubString(SString S,SString sub,int pos,int len); // 7 求子串,在指定位置pos上,截取了len,赋值给sub。
int StrIndex(SString S,SString T,int pos); // 8 从S的pos匹配T,找出T首次出现的位置。返回相应下标或-1.
void StrReplace(SString S,SString T,SString V); // 9 替换。用V替换S中所有与T相等不重叠的
void StrInsert(SString S,int pos,SString T); // 10 在S的pos前插入T。
void StrDelete(SString S,int pos,int len); // 11 从pos删除len的字符。
void StrClear(SString S); // 12 清除
void PrintString(SString S); // 13 打印
#endif
- SString.c
//
// SString.c
// 11_StackString
//
// Created by ls on 2022/5/24.
// Copyright © 2022 LSC001. All rights reserved.
//
#include "SString.h"
void InitString(SString S)
{
S[0]=' ';
}
void StrAssign(SString S,char *str) // 1 把str放在T中。
{
int i = 0;
while(str[i] != ' ')
{
S[i] = str[i];
i++;
}
S[i] = ' ';
}
void StrCopy(SString S,SString T) // 2
{
int i = 0;
while(T[i] != ' ')
{
S[i] = T[i];
i++;
}
S[i] = ' ';
}
bool StrEmpty(SString S) // 3
{
return S[0]==' ';
}
int StrCompare(SString S,SString T) // 4
{
int tmp = 0;
while(*S != ' ' || *T != ' ' )
{
tmp = *S - *T;
if(tmp != 0) break;
++S;
++T;
}
if(tmp>0)tmp = 1;
else if(tmp<0)tmp = -1;
return tmp;
}
int StrLength(SString S) // 5
{
int i = 0;
while (*S!=' ') {
++S;
++i;
}
return i;
}
void StrConcat(SString T,SString s1,SString s2) // 6 T=s1+s2
{
int len_s1 = StrLength(s1);
int len_s2 = StrLength(s2);
if(len_s1 + len_s2 <= MAXSTRLEN)
{
int i=0,j = 0 ;
while (s1[i] !=' ') {
T[i] = s1[i];
++i;
}
while (s2[j] !=' ') {
T[i+j] = s2[j];
++j;
}
T[j+i] = ' ';
}
else if(len_s1 <= MAXSTRLEN)
{
int i=0,j = 0 ;
while (s1[i] !=' ') {
T[i] = s1[i];
++i;
}
while (j