- HString.h 头文件
#include#include //定义函数返回的类型 #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 //定义数据元素的类型为字符型 typedef int Status; typedef char ElemType; //定义单链表的存储结构 typedef struct { char* ch; int length; }HString; Status StrAssign(HString &T, char* chars) { // if(T.ch != NULL) { // free(T.ch); // } int i; char* c; for(i=0,c=chars; *c; i++, c++); if(!i) { T.ch = NULL; T.length = 0; } else { if(!(T.ch=(char*)malloc(i*sizeof(char)))) { exit(OVERFLOW); } for(int j=0; jS.length || len<0 || len>S.length-pos+1) { return ERROR; } // if(Sub.ch != NULL) { // free(Sub.ch); // } if (!len) { Sub.ch = NULL; Sub.length = 0; } else { Sub.ch = (char*)malloc(len*sizeof(char)); for (int j = 0,i = pos-1; j = T.length)return i - T.length+1; //匹配成功 else return 0; //输出-1失败 }
exp-1 主程序:测试基本功能
#include "HString.h"
int main() {
HString s;
HString s1;
printf("%sn", "(1)建立串");
char str1[] = "abcdefghxyzhijklmn";
char str2[] = "xyz";
StrAssign(s, str1);
StrAssign(s1, str2);
printf("%s%sn", "(2)输出串s:", s.ch);
printf("%s%dn", "(3)输出串s的长度:", StrLength(s));
//将串s分为两个子串
HString s_sub1;
HString s_sub2;
SubString(s_sub1, s, 1, 8);
SubString(s_sub2, s, 9, StrLength(s)-8);
printf("%sn", "(4)在串s的第9个字符位置插入串s1而产生s2");
//将s1先与前部分的子串连接,得到temp,再将temp和后部分子串连接,从而实现插入操作
HString s2;
HString temp;
Concat(temp, s_sub1, s1);
Concat(s2, temp, s_sub2);
printf("%s%sn", "(5)输出串s2:", s2.ch);
printf("%sn", "(6)删除s的第2个字符开始的5个字符而产生串s2");
StrDelete(s, s2, 2, 5);
printf("%s%sn", "(7)输出串s2:", s2.ch);
printf("%sn", "(8)删除s的第2个字符开始的5个字符替换成s1而产生串s2");
HString s2_sub1;
HString s2_sub2;
SubString(s2_sub1, s2, 1, 1);
SubString(s2_sub2, s2, 2, s2.length-1);
Concat(temp, s2_sub1, s1);
Concat(s2, temp, s2_sub2);
printf("%s%sn", "(9)输出串s2:", s2.ch);
printf("%sn", "(10)提取串s的第2个字符开始的10个字符而产生s3");
HString s3;
SubString(s3, s, 2, 10);
printf("%s%sn", "(11)输出串s3:", s3.ch);
printf("%sn", "(12)将串s1和s2连接起来而产生串s4");
HString s4;
Concat(s4, s1, s2);
printf("%s%sn", "(13)输出串s4:", s4.ch);
int next[10] = { -1,0,0,1,1,2,0,1 };
int leng = Index_KMP(s, s1, 1, next);
printf("%s%dn", "(14)输出串s1在主串s中的位置,如不存在输出0, 首元素的位置为:",leng);
return 0;
}
- 测试结果
- exp-2 主程序:利用该结构进行字符加密解密
#include "HString.h"
HString A;
HString B;
char a[] = "abcdefghijklmnopqrstuvwxyz";
char b[] = "ngzqtcobmuhelkpdawxfyivrsj";
HString EnCrypt(HString p) {
HString enCrypt_p;
enCrypt_p.ch = (char*)malloc(p.length*sizeof(char));
enCrypt_p.length = p.length;
for (int i=0; i
- 测试结果



