子串的替换
问题:使用C语言实现字符串中子字符串的替换
描述:编写一个字符串替换函数,如函数名为 StrReplace(char* strSrc, char* strFind, char* strReplace),strSrc为原字符串,strFind是待替换的字符串,strReplace为替换字符串。
举个直观的例子吧,如:“ABCDEFGHIJKLMNOPQRSTUVWXYZ”这个字符串,把其中的“RST”替换为“ggg”这个字符串,结果就变成了:
ABCDEFGHIJKLMNOPQgggUVWXYZ
——————————————————————————————————————————————————————————————————————————
View Code
1 #include <iostream>
2 using namespace std;
3
4 void StrReplace(char* strSrc, char* strFind, char* strReplace)
5 {
6 int srclen = strlen(strSrc);
7 int findlen = strlen(strFind);
8 if(srclen < findlen) return;
9
10 // 找寻子串的起始位置
11 int start = -1,end = -1;
12 int i =0,j=0,k=0;
13 for(i =0;i<srclen;i++)
14 {
15 if(strSrc[i] == strFind[0])
16 {
17 start = i;
18 for(j = i;j<srclen && j<i+findlen;k++)
19 {
20 if ( strSrc[j] == strFind[k])
21 j++;
22 else
23 break;
24 }
25 if(j == i+findlen)
26 end = j-1;
27 }
28 }
29
30 // 找到子串的位置,并替换子串
31 if(start != -1 && end != -1)
32 {
33 int replacelen = strlen(strReplace);
34
35 if(findlen == replacelen) // 待替换子串和替换子串长度相等时
36 {
37 for(i=0;i<replacelen;i++)
38 {
39 strSrc[start+i] = strReplace[i];
40 }
41 }
42
43 if(findlen > replacelen) // 待替换子串的长度大于替换子串时
44 {
45 for(i=0;i<replacelen;i++)
46 {
47 strSrc[start+i] = strReplace[i];
48 }
49 j = start +i;
50 i = end+1;
51 for(i;i<srclen;i++,j++)
52 strSrc[j] = strSrc[i];
53 strSrc[j] = '\0';
54 }
55
56 if(findlen < replacelen) // 待替换子串的长度小于替换子串时
57 {
58 j = srclen;
59 int k = replacelen - findlen;
60 while(j>end)
61 {
62 strSrc[j + k] = strSrc[j];
63 j--;
64 }
65 j=0; i=0;
66 while(j < replacelen)
67 {
68 strSrc[start+i] = strReplace[j];
69 i++; j++;
70 }
71 strSrc[srclen+k+1] = '\0';
72 }
73 }
74 else
75 return;
76
77 }
78
79 void main()
80 {
81 char strSrc[50];
82 char strFind[20];
83 char strReplace[20];
84
85 cin >> strSrc ;
86 cin >> strFind;
87 cin >> strReplace;
88
89 StrReplace(strSrc,strFind,strReplace);
90
91 cout << strSrc << endl;
92 }
待替换子串和替换子串长度相等时:
abcd
bc
ef
aefd
请按任意键继续. . .
待替换子串长度大于替换子串时:
abcd
bc
g
agd
请按任意键继续. . .
待替换子串长度小于替换子串时:
abcd
bc
efgh
aefghd
请按任意键继续. . .