求指点数据结构串操作问题
问题描述:
数据结构自学者一枚,在编译串操作实验指导时无法写出完整代码。
#运行结果不正确
#主函数错误较多
#include<stdio.h>
#include<stdlib.h>
#define OVERFLOW -2
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define MAXSTRLEN 255
typedef unsigned char SString[MAXSTRLEN + 1];
SString S;
typedef int Status;
typedef struct {
char *ch;
int length;
} HString;
/*void Init_String(HString *T) {
*T=(char*)malloc()
T->ch = NULL;
T->length = 0;
}*/
Status StrEmpty(HString &T)
{
if(T.length==0&&T.ch==NULL)
return true;
else
return false;
}
void StrPrint(HString S)
{
int i;
if(StrEmpty(S))
printf("S为空串,不可输出!");
for(i=0;i<S.length;i++)
printf("%c",S.ch[i]);
printf("\n");
}
Status StrInsert(HString &S, int pos, HString T) {
int i;
if (pos < 1 || pos > S.length + 1)
return ERROR;
if (T.length) {
if (!(S.ch = (char*)realloc(S.ch, (S.length + T.length) * sizeof(char))))
exit(OVERFLOW);
for (i = S.length - 1; i >= pos - 1; --i)
S.ch[i + T.length] = S.ch[i];
for (i = 0; i < T.length; i++)
S.ch[pos - 1 + i] = T.ch[i];
S.length += T.length;
}
return OK;
}
Status StrAssign(HString &T, char *chars) {
int i, j;
char *c;
if (T.ch) free(T.ch);
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 (j = 0; j < i; j++)
T.ch[i] = chars[j];
T.length = i;
}
}
int StrCompare(HString S, HString T) {
int i;
for (i = 0; i < S.length && i < T.length; ++i) {
if (S.ch[i] != T.ch[i])
return S.ch[i] - T.ch[i];
return S.length - T.length;
}
}
Status Concat(HString &T, HString S1, HString S2) {
int i;
if (T.ch) free(T.ch);
if (!(T.ch = (char*)malloc((S1.length + S2.length) * sizeof(char))))
exit(OVERFLOW);
for (i = 0; i < S1.length; i++)
T.ch[i] = S1.ch[i];
for (i = 0; i < S2.length; i++)
T.ch[S1.length + i] = S2.ch[i];
return OK;
}
Status SubString(HString &Sub, HString S, int pos, int len) {
int i;
//Init_String(&Sub);
if (pos < 1 || pos > S.length || len < 0 || len > S.length - pos + 1)
return ERROR;
if (Sub.ch) free(Sub.ch);
if (!len) {
Sub.ch = NULL;
Sub.length = 0;
} else {
Sub.ch = (char*)malloc(len * sizeof(char));
if (!Sub.ch)
exit(OVERFLOW);
for (i = 0; i <= len - 1; i++)
Sub.ch[i] = S.ch[pos - 1 + i];
Sub.length = len;
}
return OK;
}
int StrIndex(SString S,SString T,int pos){
int i,j;
i=pos;j=1;
while(i<S[0]&&j<=T[0]){
if(S[i]==T[j]){
++i;
++j;
}else{
i=i-j+2;
j=1;
}
}
if(j>T[0])
return i-T[0];
else
return 0;
}
int main(){
int pos;
HString S,T,V;
char s[MAXSTRLEN];
char t[MAXSTRLEN];
/*Init_String(&S);
Init_String(&T);
Init_String(&V);*/
printf("***************串操作实验***************\n");
printf("请输入主串S:\n");
gets(s);
StrAssign(S,s);
printf("请输入子串T:\n");
gets(t);
StrAssign(T,t);
printf("第一个串为:%s\n",S.ch);
return 0;
}
答
HString变量都没有初始化处理,length和ch指针都是野值