【问题标题】:Using Recursion To Compare Strings To Determine Which Comes First Alphabetically Java使用递归比较字符串以确定哪个在字母顺序上排在第一位 Java
【发布时间】:2010-12-16 03:46:35
【问题描述】:

我正在尝试编写一种使用递归来比较字符串 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()));

任何想法将不胜感激

【问题讨论】:

  • 家庭作业?您有理由必须使用递归吗?就此而言,如果有最坏的方法来解决这类问题,递归可能非常接近它。
  • 我正在尝试使用递归来练习
  • 如果您只是想练习递归,您可以尝试更适合该技术的问题,例如二分搜索或快速排序。
  • -1 不只是承认这是家庭作业。

标签: java string recursion


【解决方案1】:

#include
main()
{
         char str1[100],str2[100];
        int i=0,k=0;
       puts("输入字符串 1");
       gets(str1);
        puts("输入字符串 2");
        gets(str2);
i=comp(str1,str2 ,0);
        printf("\ncount is %d %d \n",i,strlen(str1));
      (strlen(str1)==strlen(str2)) ?( (strlen(str1) )==i) ? printf("两者相等"):printf("两者不相等")):printf("两者不相等");

}
int comp(char s1[], char s2[],int i)
{
printf("\n%c %c",s1[i],s2[i]);
int sum=0,count =1;
if((s1[i] != '\0')|| (s2[i]!='\0'))
{
if (s1[i] == s2[i])
{
return (count += comp(s1,s2,++i));
}
else
{
return 0;
}
}
else
{
return 0;
}
return count;

}

【讨论】:

    【解决方案2】:

    不需要递归...(除非在作业(?)作业中特别要求...)

    因为这看起来很像家庭作业,所以我只是提供一些提示

    使用一个整数变量,比如 i,来索引从 0 到较短字符串的长度。 只要 str1[i] == str2[i],并且还没有达到最后一个索引值,就增加 i。 如果您确实达到了索引的最后一个可能值,则较短的字符串首先出现(或者如果长度相同,则它们被视为相等......)

    否则,比较这个不同的第一个字符,并相应地决定哪个字符串是第一个......可能很简单:
    返回 (str1[i]

    如果你必须递归......(在其他 cmets 中很容易说,这种问题确实不是递归的逻辑/有效候选......)

    这个想法是有一个具有这种接口的功能:

    int  RecursCompare(string str1, string str2, int i)
    

    并且它调用自己,为 str1 和 str2 传递相同的值,并为 i (i+1) 传递下一个值,只要 str1[i] == str2[i] 并且 str1 或 str2 都不在它的结尾。 当此条件变为 false 时,递归结束,而函数返回适当的值以表示 Str1 按字母顺序位于 Str2 之前或之后。

    【讨论】:

      【解决方案3】:

      创建一个方法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。否则,返回已结束的编号。

      是的,递归几乎是最糟糕的方法,哈哈。

      【讨论】:

        猜你喜欢
        • 2021-01-26
        • 1970-01-01
        • 1970-01-01
        • 2012-04-29
        • 2013-12-25
        • 1970-01-01
        • 2021-08-29
        • 2022-01-02
        相关资源
        最近更新 更多