堆分配字符串
dynamicString.h 文件
typedef int Status;
typedef struct {
char *ch;
int length;
}HString;
//初始化一个字符串
Status StrAssign(HString *S,char *chars);
//获取字符串的长度
int StrLength(HString S);
//比较两个字符串
int StrCompare(HString S1,HString S2);
//清空字符串
Status ClearString(HString *S);
//拼接两个字符串
Status Concat(HString *T,HString S1,HString S2);
//截取一个字符串的长度
Status SubString(HString *Sub,HString S,int pos,int len);
dynamicString.c
#include "dynamicString.h"
#include "stdio.h"
#include "stdlib.h"
void main() {
char s[1000],s1[1000];
printf("请输入第一个字符串的值\n");
gets_s(s,1000);
//printf("请输入第二个字符串的值\n");
//gets_s(s1, 1000);
HString S,S1,S2,Sub;
S.ch = NULL;
S1.ch = NULL;
Sub.ch = NULL;
StrAssign(&S,s);
//StrAssign(&S1, s1);
//printf("输出字符串的值为\n");
//printf("%s\n",S.ch);
//printf("字符串的长度为%d\n",StrLength(S));
//printf("比较两个字符串%d\n",StrCompare(S,S1));
//合并两个字符串
//Concat(&S2,S,S1);
//printf("合并后的字符串为%s\n",S2.ch);
printf("截取后的字符串为\n");
SubString(&Sub,S,1,3);
printf("%s\n",Sub.ch);
}
//初始化一个字符串
Status StrAssign(HString *S, char *chars) {
if (S->ch != NULL)
{
free(S->ch);
}//如果空间已经开辟则先释放
int i = 0;
char *p,*p1;
p = chars;
while (*p!='\0')
{
p++;
i++;
}
if (!i) {
S->ch = NULL;
S->length = 0;
return 0;
}
else {
p = chars;
S->length = i;
S->ch = p1=(char *)malloc(i*sizeof(char));
while (*p!='\0')
{
*p1 = *p;
p++;
p1++;
}
*p1 = '\0';
}
}
//获取字符串的长度
int StrLength(HString S) {
return S.length;
}
//比较两个字符串(先判断字符是否相等然后比对字符串的长度)
int StrCompare(HString S1, HString S2) {
while ((*S1.ch!='\0')&&(*S2.ch!='\0'))
{
if (*S1.ch != *S2.ch) return *S1.ch - *S2.ch;
S1.ch++;
S2.ch++;
}
return S1.length-S2.length;
}
//清空字符串
Status ClearString(HString *S) {
S->length = 0;
free(S->ch);
S->ch = NULL;
return 1;
}
//拼接两个字符串
Status Concat(HString *T, HString S1, HString S2) {
T->length = S1.length + S2.length;
char *p;
T->ch = p = (char *)malloc(T->length*sizeof(char));
if (!p) {
return 0;
}
while (*S1.ch!='\0')
{
*p = *S1.ch;
S1.ch++;
p++;
}
while (*S2.ch != '\0')
{
*p = *S2.ch;
S2.ch++;
p++;
}
*p = '\0';
}
//截取一个字符串的长度
Status SubString(HString *Sub,HString S, int pos, int len) {
if (len < 0 || pos<1 || pos>S.length || len>S.length-pos+1 ) {
return 0;
}
char *p;
if (Sub->ch)free(Sub->ch);
Sub->ch = p = (char *)malloc(sizeof(char)*len);
Sub->length = len;
for (int i = 1; i <=len; i++)
{
*p = *(S.ch +pos+i-2);
p++;
}
*p = '\0';
}
浙公网安备 33010602011771号