由于本人水平有限,仅供参考!
完整代码如下:
#include#include #include int* getstrindex( char *,char *); char* strreplace(char *str,char *oldword,char *newword); int myfgets(char *s,unsigned int maxlen,FILE *fp); int main(int argc, char** argv){ char s[512]="天上人间123,天上人间银河系456,天上人间789天上人间"; char s1[128]="天上人间"; char s2[128]="(已经替换)"; puts("输入原字符串:"); myfgets(s,sizeof(s),stdin); printf("n"); puts("输入要被替换掉的子字串:"); myfgets(s1,sizeof(s1),stdin); printf("n"); puts("输入替代字串:"); myfgets(s2,sizeof(s2),stdin); printf("n"); int *p=getstrindex(s,s1); printf("将要被替换的字串在原字串中位置索引分别是:n"); while(*p!=-1) printf("%d ",*p++); free(p); char *pstr=strreplace(s,s1,s2); printf("n替换后的字串:n%sn",pstr); free(pstr); return 0; } //去掉末尾的换行符 int myfgets(char *s,unsigned int maxlen,FILE *fp) { fgets(s,maxlen,fp); char *p=strrchr(s,'n'); *p=' '; return 0; } //在str字串中查找子字串,返回子字串所有索引 int* getstrindex( char *str, char *word) { if(!str || !word)return NULL; int wlen=strlen(word); int llen=strlen(str); if(wlen>llen)return NULL; char *p0=str; char *p1=word; int *index=(int*)malloc(sizeof(int)*(llen+1)); if(!index)return NULL; int i,flag=0,z=0; for(i=0;i for(int j=i,k=0;j if(*(p0+j)!=*(p1+k)) break; else ++flag; } if(flag==wlen) { index[z++]=i; } flag=0; } index[z]=-1; return index; } //在str字串中查找子字串把所有含oldword替换成newword //返回处理后的字串 char* strreplace(char *str,char *oldword,char *newword) { if(!str || !oldword || !newword)return NULL; int *pstr=getstrindex(str,oldword); if(!pstr)return NULL; char *p0=str; int slen=strlen(str); int olen=strlen(oldword); int nlen=strlen(newword); if(olen>slen)return NULL; int cou=0; for(;*(pstr+cou)!=-1; cou++); printf("n共%d个n",cou); char *newp=(char *)calloc( sizeof(char),(slen+1+cou*nlen-cou*olen)); int k=0,j=0,flag=1; for(int i=0;*(p0+i)!=' ' ; i++) { for(int z=0;*(pstr+z)!=-1 ; z++) { if(i==*(pstr+z)) { flag=0; break; } } if(flag) { *(newp+k++)=*(p0+i); } else if(flag==0) { i+=(olen-1); memcpy(newp+k,newword,nlen); k+=nlen; } flag=1; } *(newp+k)=' '; return newp; }



