栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言字符串批量查找批量替换

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言字符串批量查找批量替换

由于本人水平有限,仅供参考!
完整代码如下:

 
#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;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/997566.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号