2013-10-29 41 views
1

CS在这里学生。像往常一样,我很困惑。我的任务是仅使用.charAt()和.length()在字符串中搜索子字符串(均由用户提供)。它应该返回的是字符串中子字符串的开始索引(如果它根本不存在,则为-1)。坦率地说,我不确定从哪里开始。我试图做类似如下:使用charAt在字符串中搜索子字符

 for (int i=0;i<string.length();i++) 
      if (string.charAt(i) == substring.charAt(i)) 

如果这是真的话,我想做一些像每串后面的两个字符进行比较。我在这里基地?有关如何起飞的建议?

感谢您的阅读。

+0

什么字符串?什么是子串? –

+0

我不知道。用户将提供这些内容。 – CSpadawan

+0

我认为你有正确的想法。你想迭代给定的字符串,并将你所在的字符与子字符串的第一个字符进行比较。如果找到它,请检查子字符串的其余部分。 – hankd

回答

1

如果您只允许使用charAtlength方法,那么您将需要嵌套for循环。为了不破坏你的运动,我会尽我所能让你开始,而不是为你做。

for(int i = 0; i < string.length(); i++) 
    for(int j = 0; j < substring.length(); j++) 

我们在这里是说的字符串的各项指标,通过所有的子字符串的字符进行迭代,并做一些事情。显然,你将不得不以某种方式比较角色。如果你通过整个子字符串和字符匹配,你会想要返回outter循环的计数,因为这是子字符串开始的地方。

如果通过整个嵌套循环并且没有返回子字符串所在的索引,则需要返回-1。您需要在那里提供if声明来提供该逻辑。评论你是否需要帮助!

1

如果你只是想做一个天真的解决方案,你所需要做的就是设置两个循环。一个for循环遍历字符串的位置,一个inner while循环,如果您将子字符串的开始字符与字符串中的字符匹配,则可以用它循环遍历查询和主字符串。所有你需要做的就是检查以确保你不会超出主字符串,这可以通过适当的循环索引来完成。在inner while循环中,可以使用外循环的计数器和内循环的计数器的组合进行必要的比较。

我没有包含代码,因为这是一项家庭作业,但是您应该从这里继续。

1

未经测试:

private static final int indexOf(String string, String substring) { 
    outerloop: for (int i = 0; i < string.length() - substring.length(); i++) { 
     for (int j = 0; j < substring.length(); j++) { 
      if (substring.charAt(j) != string.charAt(i + j)) { 
       continue outerloop; 
      } 
     } 
     return i; 
    } 
    return -1; 
} 
1

也许这样的事情可以工作,我不能马上测试,但我认为它不是一个坏主意。

for (int i=0;i<string.length();i++){ 
       if (string.charAt(i) == substring.charAt(i)){ 
         int j = i+1; 
         int l =0; 
         while (l<substring.lenght && string.charAt(j) == substring.charAt(l)){ 
           j++;i++; 
         } if (l=substring.lenght){ 
          return i; 
         } 
       } 
     } 
0

好的方法@rolfl。 为您的解决方案增加一个小小的贡献: 当字符串等于子字符串时,存在一个小错误。它永远不会在outerloop得到,我们可以有串=“猫”和子=“猫”这样的indexOf应该是0 修改外环应该工作:i < s1.length() - (substring.length()-1)

@Test 
    public void test_firstSubstring(){ 
    String s = "cat"; 
    String p = "cat"; 

    int actual = findFirstSubstring(s,p); 
    assertEquals(0,actual); 
    } 

public static int findFirstSubstring(String s1, String substring){ 
    if(s1.isEmpty() || substring.isEmpty() || substring.length() > s1.length()){ 
     return -1; 
    } 

    outloop: for (int i = 0; i < s1.length() - (substring.length()-1) ; i++){ 
     for (int j=0; j < substring.length(); j++){ 
       if (s1.charAt(i+j) != substring.charAt(j)) { 
        continue outloop; 
       } 
      } 
      return i; 
    } 
    return -1; 
    } 
+1

这应该是对@ rolfl答案的评论。 – J0e3gan

+0

啊对不起,我对这个页面很新。 – Maciano

相关问题