【发布时间】:2014-02-04 05:54:03
【问题描述】:
这是一个家庭作业问题,所以虽然我想要可用的代码,但我真正寻求的是如何解决这个问题的见解。我有两个按升序排列的数组,我需要在递归函数中组合它们。看来我需要建立归并排序算法的排序部分。要求是递归函数只能将两个排序后的字符串作为参数,不能使用全局变量或静态变量。
我认为伪代码是:
- 如果两个字符串的大小 == 0 则返回结果字符串。
- 比较每个字符串的 substr(0,1) 以查看哪个较小,并将其附加到结果字符串
- 递归调用函数,新参数是附加字符串的子字符串
我的问题是:如果我不能使用静态变量,如何保存结果字符串?我已经看到将字符串定义为递归调用的 return 语句的代码。在这种情况下会起作用吗?
第二个问题是如何递增函数。我需要在第一次迭代后调用 substr(1,size-1) ,然后在不使用静态变量的情况下增加它。
这是我尝试用静态变量(不允许)求解方程:
static string result="";
static int vv=0;
static int ww=0;
if(v.size()==0 && w.size()==0)
return result;
if(w.size()==0 || v.substr(0,1) <= w.substr(0,1)){
result+=v.substr(0,1);
vv++;
return spliceSortedStrings( v.substr(vv,v.size()-vv) , w);
}
else if(v.size()==0 || w.substr(0,1) > v.substr(0,1)){
result+=w.substr(0,1);
ww++;
return spliceSortedStrings( v , w.substr(ww,w.size()-ww));
}
我会很感激任何指导。
【问题讨论】:
-
很抱歉,我错过了一些东西。这个练习的重点是获取两个排序字符的字符串,然后递归地将它们合并到一个字符串中,结果也被排序?而且无论这是否是目标,当您只关心
front()(假设!empty()已被验证)时,重复的substr()调用都是疯狂的。substr()昂贵,因为每个都会生成一个新分配的独立字符串。 -
是的,这些都是练习的要求。
-
好的。如果您认为有帮助,我会发布一些内容,尽管您似乎已经有了喜欢的答案。
-
user1734710 的回答很有帮助。
-
我同意,这就是我投赞成票的原因。
标签: c++ string recursion mergesort