读书人

在一个字符串中删除一些字符串指针的有

发布时间: 2013-01-18 10:22:42 作者: rapoo

在一个字符串中删除一些字符串指针的问题
#include "stdafx.h"
#define _MAX_ 256//字符串最大长度
int delstring(char **target,char *source);//删除字符串的函数
int main()
{
char *p_target=0;
char *p_source=0;
int k=0;
p_target=new char[_MAX_];//申请空间
p_source=new char[_MAX_];//申请空间
cout<<"请输入目标串: ";
cin>>p_target;
cout<<"请输入删除串: ";
cin>>p_source;
cout<<"在\""<<p_target<<"\"内删除\""<<p_source<<endl;
cout<<"---------------"<<endl;
if (strlen(p_target)<strlen(p_source))
cout<<"目标串长度小于替换串!"<<endl;
else
{
k=delstring(&p_target,p_source);//删除
if (k>0)//成功
cout<<p_target<<endl;
else
cout<<"没找到!"<<endl;
}
delete[] p_target;//释放
delete[] p_source;
p_target=0;//赋空值
p_source=0;
return 0;
}
int delstring(char **target,char *source)
{
char *p_target=*target;
char *p_source=source;
char *p_temp=0;
char *p_next=0;
int pos=0;
p_temp=new char[strlen(*target)];//申请临时空间
p_next=p_temp;//保留指针头
while(strlen(p_target)>=strlen(source))
{
if (*p_target==*p_source)//寻找相等串
{
for(pos=0;pos<strlen(source);pos++)
{
if (*(p_target+pos)!=*p_source)
break;//寻找结束
p_source++;//移动到下一个单元
}
//部分相等时,拷贝串
if (pos<strlen(source))
{
for(int i=0;i<pos;i++)
{
*p_next=*(p_target+i);//拷贝数据单元

p_next++;//移动下一个单元
}


}
else
{
p_target+=pos;//跳过拷贝过的串
p_source=source;//原串回溯到开始处,准备下一轮比较
}
}
else
{
*p_next=*p_target;//拷贝原串中不相等的字符
p_next++;//移动下一个单元
p_target++;
}
}
//拷贝剩余的串
while(*p_target!='\0')
{
*p_next=*p_target;//拷贝字符
p_next++;//移动到下一个字符
p_target++;
}
*p_next='\0';//加字符串结束符
delete[] *target;
*target=p_temp;
return 1;
}
当执行完部分相等时,程序应刻怎么运行,在这晨为什么不把p_target 和p_source指向目标串和源串的首地址
[解决办法]
仅供参考

#include <stdio.h>
#include <string.h>
char s[256];
char *p;
int r,n,i;
int main() {
while (1) {
printf("请输入一行文字(空行结束),\"%%20\"将替换为\" \",\"你懂得\"将替换为\"XXXXXX\":\n");
fgets(s,256,stdin);
if ('\n'==s[0]) break;
p=s;
while (1) {
p=strstr(p,"%20");
if (p) {
memmove(p+1,p+3,strlen(p)-3+1);
p[0]=' ';
} else break;
}
p=s;
while (1) {
p=strstr(p,"你懂得");
if (p) {
memmove(p+6,p+6,strlen(p)-6+1);
for (i=0;i<6;i++) p[i]='X';
} else break;
}
printf("%s",s);
}
return 0;
}
//请输入一行文字(空行结束),"%20"将替换为" ","你懂得"将替换为"XXXXXX":
//abcdefg%20helloworld%20something.pdf
//abcdefg helloworld something.pdf
//请输入一行文字(空行结束),"%20"将替换为" ","你懂得"将替换为"XXXXXX":
//这是测试文字你懂得,在这个你懂的地方,就得做你懂得的事
//这是测试文字XXXXX,在这个你懂的地方,就得做XXXXX的事
//请输入一行文字(空行结束),"%20"将替换为" ","你懂得"将替换为"XXXXXX":
//


读书人网 >C++

热点推荐