当前位置: 代码迷 >> C语言 >> 我有错!!
  详细解决方案

我有错!!

热度:107   发布时间:2007-03-13 14:21:36.0
我有错!!

//删除a里 b的字符串(不是字符),如:a:abcababcbacab,b:abc;得出结果是abbacab,不是连续出现的不删除
#include<stdio.h>
#include<string.h>

char *select(char *result,char *des,char *src)
{
char *tempResult=result;//results的移标
char *record=des;//位置记录
char *tempDes=des;//des的移标
char *tempSrc=src;//src的移标
while(*tempDes) //list des
{
record=tempDes;//记录当前位置。
tempSrc=src;
if(*tempDes==*tempSrc) //如果第一个相等
{
while((*tempDes++ == *tempSrc++))//如果全部都等
{

if(*tempSrc == '\0')
record=tempDes;//移标复位
}
tempDes=record; //如果只有一部分等
}
*tempResult++=*tempDes++;//把不等的部分记录下来
}
return result;//返回新记录
}

int main(void)
{
char a[]="abcababcbacab";
char b[]="abc";
char c[50];
char *p=c;
p=select(p,a,b);
printf("%s\n",p);
return 0;
}


----------------解决方案--------------------------------------------------------
测试不行哦,有乱码
----------------解决方案--------------------------------------------------------
以下是引用anthony634在2007-3-13 14:21:36的发言:

//删除a里 b的字符串(不是字符),如:a:abcababcbacab,b:abc;得出结果是abbacab,不是连续出现的不删除
#include<stdio.h>
#include<string.h>

char *select(char *result,char *des,char *src) //指针函数和地下的 不一致
{
char *tempResult=result;//results的移标
char *record=des;//位置记录
char *tempDes=des;//des的移标
char *tempSrc=src;//src的移标
while(*tempDes) //list des
{
record=tempDes;//记录当前位置。
tempSrc=src;
if(*tempDes==*tempSrc) //如果第一个相等
{
while((*tempDes++ == *tempSrc++))//如果全部都等
{

if(*tempSrc == '\0')
record=tempDes;//移标复位
}
tempDes=record; //如果只有一部分等
}
*tempResult++=*tempDes++;//把不等的部分记录下来
}
return result;//返回新记录
}

int main(void)
{
char a[]="abcababcbacab";
char b[]="abc";
char c[50];
char *p=c;
p=select(p,a,b);
printf("%s\n",p);
return 0;
}

如:a:abcababcbacab,b:abc;得出结果是abbacab, 这个是真确结果么?


----------------解决方案--------------------------------------------------------
数组要先赋值
----------------解决方案--------------------------------------------------------
int main(void)
{
char a[]="abcababcbacab";
char b[]="abc";
char c[50]="";
char *p=c;
p=select(p,a,b);
printf("%s\n",p);
return 0;
}

----------------解决方案--------------------------------------------------------
你们修改了之后都编译过了的么?我编译后得不到想要的答案哦,前几天发现其他组合可以的,只是不知道这个组合为什么不行,后来在最后匹配的情况下,加上'\0'才可以.因为最后匹配时没又加结束符号

[此贴子已经被作者于2007-3-19 14:38:54编辑过]



----------------解决方案--------------------------------------------------------
  相关解决方案