我正在尝试编写一种方法,该方法使用递归来比较字符串str1和str2,并确定它们中的哪一个按字母顺序排列(即,根据字典中单词的排序)。
如果str1
按字母顺序排在第一位,则该方法应返回int 1
。
如果str2
按字母顺序排在第一位,则该方法应返回int 2
。
如果两个字符串相同,则该方法应返回int 0
。
我知道Java API中有一个compareTo方法,但我想知道如何在没有这个的情况下执行此操作
这是我到目前为止所做的,但我不完全确定如何继续
} if (str1.length().equals(str2.length()))
return 0;
} else {
(str.substring(1, str.length()));
非常感谢任何想法
答案 0 :(得分:4)
制作方法int recursiveCompare(String string1, String string2, int index)
。最初使用index = 0调用它。比较string1.charAt(index)
和string2.charAt(index)
,如果它们不同,则返回1或2.如果它们相同,则返回recursiveCompare(string1, string2, index + 1)
。
当然,在调用charAt(index)
之前,您必须检查string1和string2的长度。如果它们同时到达终点,则它们相等,所以返回0.否则,返回已结束的数字。
是的,递归几乎是最糟糕的做法,大声笑。
答案 1 :(得分:0)
不需要递归 ...(除非在作业(?)分配中特别要求这样做...)
由于这看起来很像家庭作业,我只是给出一些提示
使用整数变量(例如i)从0开始索引到较短字符串的长度。 只要str1 [i] == str2 [i],并且尚未达到最后一个索引值,则递增i。 如果你确实达到索引的最后一个可能的值,那么较短的字符串首先出现(或者如果长度相同则认为它们相等......)
否则,比较这个不同的第一个字符,并相应地决定哪个字符串是第一个......可以简单如下:
return(str1 [i]< str2 [i]);
如果递归你必须...... (在其他评论中很容易说,这种问题确实不是递归的逻辑/有效候选者......) / p>
我们的想法是使用这种界面来实现一个功能:
int RecursCompare(string str1, string str2, int i)
并且调用自身,为str1和str2传递相同的值并传递i(i + 1)的下一个值,只要str1 [i] == str2 [i]并且str1或str2都不在其中结束。 当此condidtion变为false时,递归结束,而函数返回适当的值以表示Str1在Str2之前或之后按字母顺序排列。
答案 2 :(得分:0)
#include< stdio.h>
main()
{
char char1 [100],str2 [100];
int i = 0,k = 0;
puts(“输入字符串1”);
获取(str1);
puts(“输入字符串2”);
获取(str2);
i = comp(str1,str2,0);
printf(“\ ncount is%d%d \ n”,i,strlen(str1));
(strlen(str1)== strlen(str2) )((strlen(str1)== i)?printf(“Both are equal”):printf(“Both are not equal”)):printf(“Both are not equal”);
} int comp(char s1 [],char s2 [],int i)
{
printf(“\ n%c%c”,s1 [i],s2 [i ]);
int int = 0,count = 1;
if if((s1 [i]!='\ 0')||(s2 [i]!='\ 0'))< br /> {
if if(s1 [i] == s2 [i])
{
return(count + = comp(s1,s2,++ i));
}其他
{
返回0;
}
}其他
*返回0;
}
返回计数;
}