请教问题,,帮下啊.

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;
}
...全文
91 点赞 收藏 8
写回复
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日
怎么都没人帮下啊。
分虽少但诚意真啊。
帮下职。
回复 点赞
发动态
发帖子
C++ 语言
创建于2007-09-28

3.1w+

社区成员

24.8w+

社区内容

C++ 语言相关问题讨论,技术干货分享
社区公告
暂无公告