Сравнение двух строк - PullRequest
       3

Сравнение двух строк

3 голосов
/ 05 марта 2011

У меня есть следующий код:

    int t = s.length()-1;
    int g = 0;

    for (int i=0; i < s.length(); i++){

        if (s.charAt(i) != h.charAt(t--));
            g++;

    }

    if (g==0)
        return true;

    else 
        return false;

По сути, этот код должен проверять, равна ли обратная строка h строке s, или наоборот.По какой-то причине всегда возвращается «ложь» - хотя очевидный ответ верен.

Может кто-нибудь сказать мне, что не так с моим кодом?

Спасибо!

Ответы [ 4 ]

8 голосов
/ 05 марта 2011

Я бы сказал, что дополнительный ; является виновником.

Вместо

if (s.charAt(i) != h.charAt(t--));

использование

if (s.charAt(i) != h.charAt(t--))

Вы всегда должны идти «безопасным» путем. То есть используйте фигурные скобки после операторов if-else (и почти везде, где вы можете их использовать), поэтому таких ошибок не будет. Правильный способ написать это:

if (s.charAt(i) != h.charAt(t--)) {
   g++;
}

И, кстати, ваш код взорвется, если вы не проверите сначала, что s и h имеют одинаковую длину.

3 голосов
/ 05 марта 2011

дополнительные ; в if (s.charAt(i) != h.charAt(t--)); могут создать проблему

Используйте

if (s.charAt(i) != h.charAt(t--))
{
  g++;
  break; // if not match, not need to continue with loop
}
1 голос
/ 05 марта 2011

Если это не учебное упражнение, я бы рекомендовал вам не писать циклы самостоятельно и использовать некоторый код библиотеки. Вы можете сделать:

String s = "abcd";
String h = "dcba";

System.out.println( h.equals( new StringBuffer(s).reverse().toString() ) );

или StringUtils # reverse .


Под капотом эти петли проходят через шнур так же, как вы это делали. Код находится в AbstractStringBuilder , если вы хотите посмотреть.

0 голосов
/ 05 марта 2011

используйте break;, чтобы выйти из цикла, если у него нет одинакового символа

bool g = true;
for(.....)
{
   if (s.charAt(i) != h.charAt(t--))
   {
      g = false;
      break;
   }
}
return g;

Это увеличивает вашу производительность

...