#include <stdio.h>
int strlen(char *);
void input(char *p);
int select(char *p1,char *p2,int *n);//反回1表示找到串,0为未找到;n为记录第几个位置开始的,位置从0开始算起
void del(char *p1,int n,int m);
void change_2(char *p1,char *p3,int n);
int change(char *p1,char *p2,char *p3);
void print(char *p);
void main()
{
char str_b[80];//原串
char str_s[20];//查找串
char str_c[20];//改变后串
char *p_b;//指向原串
char *p_s;//指向查找串
char *p_c;//指向改变串
int i;
int *j;
int a;
int b;
j=&a;
p_b=str_b;
p_s=str_s;
p_c=str_c;
puts("请输入原串:");
input(p_b);
puts("请输入要查找的串:");
input(p_s);
puts("请输入用来替换的串:");
input(p_c);
b=select(p_c,p_s,j);
if(b!=0)
{
   printf("无意义处理!\n");
   return;
}
i=change(p_b,p_s,p_c);
if(i!=0)
{
puts("替换后的串为:");
print(p_b);
putchar(10);
}
else
   puts("不存在要替换的串!");
return ;
}
void input(char *p)//输入串函数
{
gets(p);
return;
}
int select(char *p1,char *p2,int *n)//从p1里查找p2
{
int flag=0;//标志是否存在
int loca;//标志存在位序
int len=0;//记录主串走的位置的
int len1,len2;//分别记录二个串的长度
char *t1,*t2;
int len_2;//标志2走了的位置
t1=p1;
t2=p2;
len1=strlen(t1);
len2=strlen(t2);
if(len2>len1)//当查找的串比原串长
{
   /*printf("\"");
   print(p1);
   printf("\"");
   printf("不包含:");
   printf("\"");
   print(p2);
   printf("\"");
   putchar(10);*/
   return 0;
}
else
{
   while(strlen(t1)>=strlen(t2))
   {
    if(*t1!=*t2)
    {
     t1++;
     len++;
    }
    else
    {
     len_2=0;
     while(*t1==*t2&&*t2)
     {
      t1++;
      t2++;
      len_2++;
     }
     if(len2==len_2)
     {
      flag=1;//能查找到
      loca=len;//记录起始位置
      break;
     }
     else
     {
      len++;
      t1=p1+len;
      t2=p2;
     }
    }
   }
   if(flag==1)//查找到串
   {
    /*printf("\"");
    print(p1);
    printf("\"");
    printf("中包含\"");
    print(p2);
    printf("\"");
    putchar(10);
    printf("位置是%d个开始!\n",len+1);*/
    *n=len;
    return 1;
   }
}
return 0;
}
int change(char *p1,char *p2,char *p3)//将p1里存在的p2用p3替换
{
int flag;
int len2;//第二个串的长度
int wei;//存在字符的起始位置
//int i,j;
int *w;
int count=0;
char *t1,*t2,*t3;
w=&wei;
t1=p1;
t2=p2;
t3=p3;
len2=strlen(p2);
flag=select(p1,p2,w);//用wei得到字符的起始位置及判断是否存在可替换的字符
while(flag)
{
   count++;
   del(p1,wei,len2);
   change_2(p1,p3,wei);
   flag=select(p1,p2,w);//用wei得到字符的起始位置及判断是否存在可替换的字符
}
return count;
}
void del(char *p1,int n,int m)//将p1里从第n个开始的m个删除掉
{
char *tf,*ted;
tf=p1+n;
ted=p1+n+m;
while(*ted)
{
   *tf=*ted;
   tf++;
   ted++;
}
*tf='\0';
}
void change_2(char *p1,char *p3,int n)//从第n位用p3插入
{
char *t1,*t3;
char *ted;//指向p1尾部指针
char *tnw;//指向新尾部
int len3;//p3长度
int len1;//p1长度
t1=p1;
len1=strlen(t1);
t3=p3;
len3=strlen(t3);
ted=p1+len1;
tnw=p1+len1+len3;
while(ted>=p1+n)
{
   *tnw=*ted;
   tnw--;
   ted--;
}
t1=p1+n;
while(*t3)
{
   *t1=*t3;
   t1++;
   t3++;
}
}
void print(char *p)//输入串函数
{
printf("%s",p);
return;
}
int strlen(char *str)
{
        int i=0;
        while(*(str+i)!='\0')
        {
             i++;
        }
        return i;
}

解决方案 »

  1.   

    从某种意义上说C语言是C++的子集,你这个代码直接找个C++编译器直接编就好了。
      

  2.   

    给你个建议,
    1直接使用CString 的 find
    2使用string 的find3可以直接用,不用翻译。
      

  3.   


    给你个建议,
    1直接使用CString 的 find
    2使用string 的find3可以直接用,不用翻译。
      

  4.   

    好的,我来翻:
    #include <stdio.h>
    int strlen(char *);
    void input(char *p);
    int select(char *p1,char *p2,int *n);//反回1表示找到串,0为未找到;n为记录第几个位置开始的,位置从0开始算起
    void del(char *p1,int n,int m);
    void change_2(char *p1,char *p3,int n);
    int change(char *p1,char *p2,char *p3);
    void print(char *p);
    void main()
    {
    char str_b[80];//原串
    char str_s[20];//查找串
    char str_c[20];//改变后串
    char *p_b;//指向原串
    char *p_s;//指向查找串
    char *p_c;//指向改变串
    int i;
    int *j;
    int a;
    int b;
    j=&a;
    p_b=str_b;
    p_s=str_s;
    p_c=str_c;
    puts("请输入原串:");
    input(p_b);
    puts("请输入要查找的串:");
    input(p_s);
    puts("请输入用来替换的串:");
    input(p_c);
    b=select(p_c,p_s,j);
    if(b!=0)
    {
      printf("无意义处理!\n");
      return;
    }
    i=change(p_b,p_s,p_c);
    if(i!=0)
    {
    puts("替换后的串为:");
    print(p_b);
    putchar(10);
    }
    else
      puts("不存在要替换的串!");
    return ;
    }
    void input(char *p)//输入串函数
    {
    gets(p);
    return;
    }
    int select(char *p1,char *p2,int *n)//从p1里查找p2
    {
    int flag=0;//标志是否存在
    int loca;//标志存在位序
    int len=0;//记录主串走的位置的
    int len1,len2;//分别记录二个串的长度
    char *t1,*t2;
    int len_2;//标志2走了的位置
    t1=p1;
    t2=p2;
    len1=strlen(t1);
    len2=strlen(t2);
    if(len2>len1)//当查找的串比原串长
    {
      /*printf("\"");
      print(p1);
      printf("\"");
      printf("不包含:");
      printf("\"");
      print(p2);
      printf("\"");
      putchar(10);*/
      return 0;
    }
    else
    {
      while(strlen(t1)>=strlen(t2))
      {
      if(*t1!=*t2)
      {
      t1++;
      len++;
      }
      else
      {
      len_2=0;
      while(*t1==*t2&&*t2)
      {
      t1++;
      t2++;
      len_2++;
      }
      if(len2==len_2)
      {
      flag=1;//能查找到
      loca=len;//记录起始位置
      break;
      }
      else
      {
      len++;
      t1=p1+len;
      t2=p2;
      }
      }
      }
      if(flag==1)//查找到串
      {
      /*printf("\"");
      print(p1);
      printf("\"");
      printf("中包含\"");
      print(p2);
      printf("\"");
      putchar(10);
      printf("位置是%d个开始!\n",len+1);*/
      *n=len;
      return 1;
      }
    }
    return 0;
    }
    int change(char *p1,char *p2,char *p3)//将p1里存在的p2用p3替换
    {
    int flag;
    int len2;//第二个串的长度
    int wei;//存在字符的起始位置
    //int i,j;
    int *w;
    int count=0;
    char *t1,*t2,*t3;
    w=&wei;
    t1=p1;
    t2=p2;
    t3=p3;
    len2=strlen(p2);
    flag=select(p1,p2,w);//用wei得到字符的起始位置及判断是否存在可替换的字符
    while(flag)
    {
      count++;
      del(p1,wei,len2);
      change_2(p1,p3,wei);
      flag=select(p1,p2,w);//用wei得到字符的起始位置及判断是否存在可替换的字符
    }
    return count;
    }
    void del(char *p1,int n,int m)//将p1里从第n个开始的m个删除掉
    {
    char *tf,*ted;
    tf=p1+n;
    ted=p1+n+m;
    while(*ted)
    {
      *tf=*ted;
      tf++;
      ted++;
    }
    *tf='\0';
    }
    void change_2(char *p1,char *p3,int n)//从第n位用p3插入
    {
    char *t1,*t3;
    char *ted;//指向p1尾部指针
    char *tnw;//指向新尾部
    int len3;//p3长度
    int len1;//p1长度
    t1=p1;
    len1=strlen(t1);
    t3=p3;
    len3=strlen(t3);
    ted=p1+len1;
    tnw=p1+len1+len3;
    while(ted>=p1+n)
    {
      *tnw=*ted;
      tnw--;
      ted--;
    }
    t1=p1+n;
    while(*t3)
    {
      *t1=*t3;
      t1++;
      t3++;
    }
    }
    void print(char *p)//输入串函数
    {
    printf("%s",p);
    return;
    }
    int strlen(char *str)
    {
      int i=0;
      while(*(str+i)!='\0')
      {
      i++;
      }
      return i;
    }