首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2013-01-18 
在一个字符串中删除一些字符串指针的问题#include stdafx.h#define _MAX_ 256//字符串最大长度int delst

在一个字符串中删除一些字符串指针的问题
#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":
//


热点排行