微软笔试题3

来源:互联网 发布:清除上网痕迹软件 编辑:程序博客网 时间:2024/04/29 22:51

把字符串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;
}

原创粉丝点击