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