微软笔试题3

把字符串S中所有子串A替换成子串B,使用自定义的strstr
#include<iostream>
using namespace std;

char* My_strstr(char *str1, const char *str2 )
{
     assert(str1 != NULL && str2 != NULL);
     char *p = str1;
     const char *q = str2;
     while(*str1 != '/0' && *str2 != '/0')
     {
          if(*str1 == *str2)
          {
              ++str1;
              ++str2;
          }
          else
          {
               str1 = ++p;
               str2 = q;
          }
     }
     if(*str2 == '/0')
     {
          return p;
     }
     return NULL;
}


void str_A_to_B(char *str,const char *subA,const char *subB)
{
     assert(str != NULL && subA != NULL && subB != NULL);
     int lenA = strlen(subA);
     int lenB = strlen(subB);
    
     char *p = str;
     while(p != NULL)
     {
         p =My_strstr(str,subA);
         if(p != NULL)
         {
              if(lenA == lenB)
              {
                  strncpy(p,subB,lenA);
              }
              else if(lenA > lenB)
              {
                  char *ptr = p + lenA;
                  char *ps = p +lenB;
                  while(*ptr != '/0')
                  {
                       *ps++ = *ptr++;
                  }
                  strncpy(p,subB,lenB);
              }
              else
              {
                   int newlen = strlen(str);
                   char *ptr = &str[newlen-1];
                   char *ps = p + lenA;
                  
                   int sp = lenB-lenA;
                   while(ptr >= ps)
                   {
                       *(ptr+sp) = *ptr;
                       --ptr;
                   }
                   strncpy(p,subB,lenB);
              }           
         }
         else
         {
             break;
         }
         p = My_strstr(str+lenA,subB);
     }
}
int main()
{
    char str[200];
    memset(str,0,200);
    strcpy(str,"pqrstaaaaajkjk");
    char ch = 'a';
    cout<<str<<endl;
   
    char *subA = "aa";
    char *subB = "QQQQQ";
   
    str_A_to_B(str,subA,subB);
    cout<<str<<endl;
    system("pause");
    return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值