请教问题,,帮下啊.

bcbuilder 2004-12-26 03:32:18
1.要求编写int squeeze(char s1[],const char s2[])
功能:从字符串s1中删除所有在s2出现的字符,返回删除个数
偶的想法:有引进第三个数组和链表两种,但是链表要用2倍的空间(多一个next),哪一种好.
有没有更好的解决办法呢?

2.这段程序是否有错:
quick_sort 函数递归并调用split函数实现数组快速排序.

void quick_sort(int x[],int first,int last)
{if (first<last)
{
split_poing=split(x,first,last);
quick_sort(x,first,split_poing-1);
quick_sort(x,split_poing+1,last);
}
}

int split(int x[],int first,int last)
{
int split_poing,pivot;
pivot=x(first);
split_point=first;
for(int unknown=first+1;unknown<=last;unknown++)
if (x[unknown]<pivot)
{
split_point++; //问题:这句是否应放在if的最后?整个程序是否有错?
int t=x[split_point];
x[split_point]=x[unknown];
x[unknown]=t; //是否放在这? split_point++;
}
x[first]=x[split_point];
x[split_point]=pivot;
return split_point;
}
...全文
117 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
凌雯 2005-03-17
  • 打赏
  • 举报
回复
第一个问题,用数组就可以了,不过如果是动态输入还是用链表好一些,因为你不知道输入的长度,再者如果用数组的话,你要返回删除个数也没有必要引入第三个数组,
bcbuilder 2005-03-17
  • 打赏
  • 举报
回复
帮下啊.感觉书上的很怪.是不是有错啊?
ltc_mouse 2005-03-17
  • 打赏
  • 举报
回复
关于第一个问题,可否引入 char tempStr[256],采用类似如下算法?
第一次扫描s2,记录s2中出现的字符(while( *s2 ) tempStr[*s2++]=1;)
第二次扫描s1,同时删除s2中出现的字符(p=s1; while(*p){ if(tempStr[*p]) *p++=0; } )
第三次扫描s1,整理删除后的s1字符串(去除s1中的0字符(被删除的))。
bcbuilder 2004-12-28
  • 打赏
  • 举报
回复
多谢,第一个问题因为他要求要删除,所以不能用登记。
第二问题程序功能就写在那里了。
就是:quick_sort 函数递归并调用split函数实现数组快速排序
问题:if里有句split_poing++是否应放在if的最后?整个程序是否有错?
这是重点大学书的例子,应该不会错,但偶就理解没过来。汗!
snow810211 2004-12-27
  • 打赏
  • 举报
回复
第一个问题:
不用引进数组吧!你一个一个的从s1中取字符,然后看看这个字符是否在s2中出现,如果出现的话就把s1中这个字符之后的都向前移动一个,count++,直到s1最后,就好了。

第二个问题:
q_sort我记住的方法,理解得比较混乱。
void Swap(int &a,int &b)
{
int c;
c=a;a=b;b=c;
}
void Qsort(int array[],int left,int rignt)
{
if(left<=right)
{
return;
}
int pivot=array[left];
int i=left;
int j=right+1;
while(true)
{
do{
i++;
}while(array[i]<pivot&&i<=right);
do{
j--;
}while(array[j]>pivot&&j>=left);
if(i>=j)
{
break;
}
Swap(array[i],array[j]);
}
array[left]=array[j];
array[j]=pivot;
Qsort(array,left,j-1);
Qsort(array,j+1,right);
}
这个感觉和你的思路差不多,你在理解理解。。
CMyMfc 2004-12-27
  • 打赏
  • 举报
回复
最好引进数组, 不引进也可以, 不过要增加很多时间开销
xuelong_zl 2004-12-27
  • 打赏
  • 举报
回复
第一个问题,用数组就可以了,不过如果是动态输入还是用链表好一些,因为你不知道输入的长度,再者如果用数组的话,你要返回删除个数也没有必要引入第三个数组,只要用一个int型变量记一下数就可以了!不知道我理解的对不对.

第二个问题,不明白你想做什么,能不能说的清楚一些呢?
bcbuilder 2004-12-27
  • 打赏
  • 举报
回复
怎么都没人帮下啊。
分虽少但诚意真啊。
帮下职。

64,318

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧