该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#ifndef MY_CSF_H// C String函数
#define MY_CSF_H 1
//
#include
#include
#include
#include
#include
//@@@@@@@@@@@@@@@@@@@@ char* + size_t @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
typedef struct TScpsi {
size_t s;
char *c;
}Tcpsi;
//@@@@@@@@@@@@@@@@@@@@ Tcpsi* + size_t + size_t @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
typedef struct {
size_t s;
size_t n;
Tcpsi *p;
}Tcsis;
//@@@@@@@@@@@@@@@@@@@@ b为假 提示cs @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
inline void iferr(bool b,const char *cs) {
if(!b) {
fputs(cs,stderr);
putc('\n',stderr);
system("pause");
exit(1); } }
//@@@@@@@@@@@@@@@@@@@@ 字符串获取 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
#define csiget(DP) csifget(DP,stdin)
char *csifget(Tcpsi *re,FILE *fp) {
if(0==re->s) {
re->s=16;
re->c=(char *)calloc(re->s,sizeof(char));
iferr(re->c,"内存申请失败"); }
if(!( fgets(re->c,re->s,fp) )) {
re->s=0;
free(re->c);
re->c=NULL;
return re->c; }
char *cp;
size_t si;
while(1) {
cp=strchr(re->c,'\n');
if(cp) {
*cp='\0';
return re->c; }
else {
re->s *= 2;
re->c=(char *)realloc(re->c,(re->s)*sizeof(char));
iferr(re->c,"内存申请失败");
si=strlen(re->c);
if(!( fgets(re->c+si, re->s-si, fp) ))
return re->c;
} } }
//Tcpsi csi={0};
//csiget(&csi);
//printf("%s\n%llu %llu\n",csi.c,csi.s,strlen(csi.c));
//csifre(&csi);
//@@@@@@@@@@@@@@@@@@@@ 字符串复制 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
char *csicpy(Tcpsi *re,const char *cpy) {
if(0==re->s) {
size_t s;
for(s=8; s
re->s=s;
re->c=(char *)calloc(re->s,sizeof(char));
iferr(re->c,"内存申请失败"); }
bool b=0;
while(re->s < strlen(cpy)+1) {
re->s *= 2;
b=1; }
if(b) {
re->c=(char *)realloc(re->c,(re->s)*sizeof(char));
iferr(re->c,"内存申请失败"); }
strcpy(re->c,cpy);
return re->c; }
//@@@@@@@@@@@@@@@@@@@@ 字符串cat @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
char *csicat(Tcpsi *re,const char *cat) {
if(0==re->s)
return csicpy(re,cat);
bool b=0;
while(re->s-strlen(re->c)-1 < strlen(cat)) {
re->s *= 2;
b=1; }
if(b) {
re->c=(char *)realloc(re->c,(re->s)*sizeof(char));
iferr(re->c,"内存申请失败"); }
strcat(re->c,cat);
return re->c; }
//@@@@@@@@@@@@@@@@@@@@ 字符串free @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
void csifre(Tcpsi *re) {
if(0==re->s) {
re->c=NULL;
return ; }
re->s=0;
free(re->c);
re->c=NULL; }
//@@@@@@@@@@@@@@@@@@@@ 字符串获取 单词 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
#define csigetw(DA) csifgetw(DA,stdin)
char *csifgetw(Tcpsi *re,FILE *fp) {// 输入EOF可能有BUG
int c0;
do {
c0=getc(fp);
}while(isspace(c0));
if(EOF==c0) {
csifre(re);
return re->c; }
if(0==re->s) {
re->s=16;
re->c=(char *)calloc(re->s,sizeof(char));
iferr(re->c,"内存申请失败"); }
re->c[0]=c0;
size_t s0;
for(s0=1; 1; ++s0) {
if(re->s <= s0) {
re->s *= 2;
re->c=(char *)realloc(re->c,(re->s)*sizeof(char));
iferr(re->c,"内存申请失败"); }
c0=getc(fp);
if(EOF==c0 || isspace(c0))
break;
re->c[s0]=c0;
}
re->c[s0]='\0';
ungetc(c0,fp);
return re->c; }
//@@@@@@@@@@@@@@@@@@@@ Tcsis get @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
#define csisget(DA) csismget(DA,0,"")
#define csiscat(DA,DB) csismget(DA,1,DB)
char *csismget(Tcsis *is,bool b,const char *cat) {
if(0==is->s) {
is->s=8;
is->n=0;
is->p=(Tcpsi *)calloc(is->s, sizeof(Tcpsi));
iferr(is->p,"内存申请失败"); }
if(is->s <= is->n) {
is->s *= 2;
is->p=(Tcpsi *)realloc(is->p, (is->s)*sizeof(Tcpsi));
iferr(is->p,"内存申请失败"); }
is->p[is->n].s=0;
if(0==b) {
if(!( csiget(&is->p[is->n]) ))
return NULL; }
else
csicpy(&is->p[is->n],cat);
++(is->n);
return is->p[(is->n)-1].c; }
//Tcsis is={0};
//for(size_t s=0; csisget(&is); ++s)
//printf("%3llu %3llu %3llu %s\n",
//is.s, is.n, s, is.p[s].c);
//csisfre(&is);
//@@@@@@@@@@@@@@@@@@@@ Tcsis free @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
void csisfre(Tcsis *is) {
if(0==is->s)
return ;
for(size_t s0=0; s0 < is->n; ++s0)
free(is->p[s0].c);
free(is->p);
is->s = is->n = 0;
is->p=NULL; }
//
#endif