zoukankan      html  css  js  c++  java
  • 子串的替换

    问题:使用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
    请按任意键继续. . .

  • 相关阅读:
    初识分布式计算:从MapReduce到Yarn&Fuxi
    日志的艺术(The art of logging)
    关于负载均衡的一切:总结与思考
    打印中文dict list的各种姿势
    不想再被鄙视?那就看进来! 一文搞懂Python2字符编码
    什么是分布式系统,如何学习分布式系统
    再论分布式事务:从理论到实践
    从银行转账失败到分布式事务:总结与思考
    git命令
    IntelliJ idea 中使用Git
  • 原文地址:https://www.cnblogs.com/xuxu8511/p/2425286.html
Copyright © 2011-2022 走看看