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

关于剔除一个字符串的一部分的程序

2012-11-04 
关于删除一个字符串的一部分的程序#include iostreamusing namespace stdint del_substr(char *str,cha

关于删除一个字符串的一部分的程序
#include <iostream>
using namespace std;

int del_substr(char *str,char *substr)
{
int count=0;
char *flag=str,*flag1=str;
char *p1=NULL,*p2=NULL;
p1=str;
for (p1=str;p1<str+strlen(str);)//遍历str,找到第一个和substr中的第一字母相同的字母就break ; 
if (*p1++==*substr)
{
flag1=flag=--p1;//找到就标记为flag和flag1;
break;
}
}


for (p2=substr;p2<substr+strlen(substr);)
{
if (*p2++==*flag++) count++;//从flag位置开始,看substr中的字母是不是喝flag之后的字母一样
}

if(count==strlen(substr)) //如果count与strlen(substr)一样,就表示:substr是str中的子串
{
char ch;
while (*flag != '\0')//从flag开始,想前移动strlen(substr)个位置。
{
*flag1++=*flag++; //!!!!!!!!!!!!!!!错误之处
cout<<*flag<<endl;
system("pause");
flag1++;
flag++;

}
cout<<str<<endl;
return 1;
}
else 
return 0;
}

int main(void)
{

char *str="abcdefg";
char *substr="cde";
// char *c=NULL;
// c=del_substr(str,substr);
cout<<del_substr(str,substr)<<endl;
return 0;
}

这是《c和指针》第六章课后编程习题的第二题,求指教,为什么错误!谢谢~!



[解决办法]
在子函数int del_substr(char *str,char *substr)中
调用 strlen(str) , strlen(substr) 合适吗?
不如将两个字符串的长度作为函数参数传递过去更加安全。

感觉 代码的逻辑也有点乱

可以这样考虑

对于str进行遍历,寻找符合 substr第一个字符的位置
如果符合第一个了,那么两个指针同时后移,比对第2个,……
在某一个点出现不匹配,立刻返回本层循环,进行第一个比对……
直到出现 完全匹配,记录位置
全部遍历完成后,根据记录的位置进行处理
可以原地工作进行拷贝,也可以借助临时空间
不要忘记最后在str后面加结束标志

楼主是这样考虑的吗?
代码贴的有点乱,我看的不是很清楚
[解决办法]

C/C++ code
int del_substr(char * str, char * substr, int len_str, int len_substr){    char * p2str = str;    char * p2substr = substr;    char * p2del = null;    int i, j;    if (str == null || substr == null) return error;    if (len_str < len_substr) return error;    for (i=0; i<len_str; i++)    {        if (*p2str == *p2substr)        {            p2del = p2str;            for (k=1; k<len_substr; k++)            {                if (p2str[k] != p2substr[k])                    break;            }            if (k == len_substr)            {                memcpy(p2del, p2del+len_substr, len_str-i-len_substr+1);                len_str -= len_substr;            }        }        if (len_str < len_substr) break;    }    return OK;}
[解决办法]
探讨

C/C++ code

int del_substr(char * str, char * substr, int len_str, int len_substr)
{
char * p2str = str;
char * p2substr = substr;
char * p2del = null;
int i, j;

if (str == null……

热点排行