C语言字符串替换

Python011

C语言字符串替换,第1张

C语言实现字符串替换函数:

#include <stdio.h>

#include <stdlib.h>

#include <ctype.h>

#include <string.h>

//字符串替换函数

/********************************************************************

* Function: my_strstr()

* Description: 在一个字符串中查找一个子

* Input: ps: 源 pd:子串

* Return :0:源字符串中没有子串1:源字符串中有子串

*********************************************************************/

char * my_strstr(char * ps,char *pd)

{

char *pt = pd

int c = 0

while(*ps != '\0')

{

if(*ps == *pd)

{

while(*ps == *pd &&*pd!='\0')

{

ps++

pd++

c++

}

}else

{

ps++

}

if(*pd == '\0')

{

return (ps - c)

}

c = 0

pd = pt

}

return 0

}

/********************************************************************

* Function: memcpy()

* Description: 复制一个内存区域到另一个区域

* Input: src: 源

count: 复制字节数.

* Output: dest: 复制目的地

* Return : dest

*********************************************************************/

void * memcpy(void * dest,const void *src,size_t count)

{

char *tmp = (char *) dest, *s = (char *) src

while (count--)

*tmp++ = *s++

return dest

}

/********************************************************************

* Function: str_replace()

* Description: 在一个字符串中查找一个子串,并且把所有符合的子串用

另一个替换字符串替换。

* Input: p_source:要查找的母字符串; p_seach要查找的子字符串

p_repstr:替换的字符串

* Output: p_result:存放结果

* Return : 返回替换成功的子串数量

* Others: p_result要足够大的空间存放结果,所以输入参数都要以\0结束

*********************************************************************/

int str_replace(char *p_result,char* p_source,char* p_seach,char *p_repstr)

{

int c = 0

int repstr_leng = 0

int searchstr_leng = 0

char *p1

char *presult = p_result

char *psource = p_source

char *prep = p_repstr

char *pseach = p_seach

int nLen = 0

repstr_leng = strlen(prep)

searchstr_leng = strlen(pseach)

do{

p1 = my_strstr(psource,p_seach)

if (p1 == 0)

{

strcpy(presult,psource)

return c

}

c++ //匹配子串计数加1

printf("结果:%s\r\n",p_result)

printf("源字符:%s\r\n",p_source)

// 拷贝上一个替换点和下一个替换点中间的字符串

nLen = p1 - psource

memcpy(presult, psource, nLen)

// 拷贝需要替换的字符串

memcpy(presult + nLen,p_repstr,repstr_leng)

psource = p1 + searchstr_leng

presult = presult + nLen + repstr_leng

}while(p1)

return c

}

#define MAX 200

int main(void)

{

int i = 0

char s[MAX] ={0} //存放源字串

char s1[MAX]={0} //存放子字串

char s2[MAX]={0} //存放替换字串

char result_a[2000] = {0}//存放替换结果

char *p,*ptm,*pr

puts("Please input the string for s:")

scanf("%s",s)

puts("Please input the string for s1:")

scanf("%s",s1)

puts("Please input the string for s2:")

scanf("%s",s2)

ptm = s

pr = result_a

i = str_replace(pr,ptm,s1,s2)

printf("替换%d个子字符串\r\n",i)

printf("替换后结果:%s\r\n",result_a)

system("pause")

}

1、首先输入代码:

#include <string.h>

#include <stdio.h>

/**

* 参数:

* originalString[] :原始字符串

* key[] : 待替换的字符串

* swap[] : 新字符串

*/

void replace(char originalString[], char key[], char swap[]){

int lengthOfOriginalString, lengthOfKey, lengthOfSwap, i, j , flag

char tmp[1000]

2、然后输入:

//获取各个字符串的长度

lengthOfOriginalString = strlen(originalString)

lengthOfKey = strlen(key)

lengthOfSwap = strlen(swap)

for( i = 0i <= lengthOfOriginalString - lengthOfKeyi++){

flag = 1

//搜索key

for(j  = 0j <lengthOfKeyj ++){

if(originalString[i + j] != key[j]){

flag = 0

break

}

}

3、然后输入:

//如果搜索成功,则进行替换

if(flag){

strcpy(tmp, originalString)

strcpy(&tmp[i], swap)

strcpy(&tmp[i + lengthOfSwap], &originalString[i  + lengthOfKey])

strcpy(originalString, tmp)

i += lengthOfSwap - 1

lengthOfOriginalString = strlen(originalString)

}

}

}

4、然后输入:

/**

* main function

*/

int main(){

char originalString[1000] = {"abcfffffabcfffffabcfffff"}

char key[] = {"abc"}

char swap[] = {"aabbcc"}

replace(originalString, key, swap)

printf("%s\n", originalString)

return 0

}

5、这样就完成了。

主要是for循环有问题,修改后的代码:

#include <stdio.h>

#include <string.h>

int main()

{

char src[250], pattern[250], replace[250], dst[250]

int i, j, k, l, m=0

int pattern_len, match_len

gets( src )

gets( pattern )

gets( replace )

pattern_len = strlen( pattern )

//strcpy( dst, src )

for ( i = 0src[i]i++ )

{

for ( j = 0, k = i, match_len = 0pattern[j]j++, k++ )

{

if ( pattern[j] == src[k] )

{

match_len++

}

else

{

match_len=0

break

}

}

if ( match_len == pattern_len )

{

//for ( k = 0k <ik++ )

//dst[k] = src[k]

for ( l = 0replace[l]m++, l++ )

dst[m] = replace[l]

//for ( l = i + match_lensrc[l]k++, l++ )

//dst[k] = src[l]

//dst[k] = '\0'

//break

i+=match_len-1

}

else

{

dst[m] = src[i]

m++

}

}

dst[m]='\0'

puts( dst )

return 0

}