webForumDet fria alternativet

For-loop

5 svar · 368 visningar · startad av PersianBulldog

PersianBulldogMedlem sedan aug. 20023 005 inlägg
#1

Hur tolkar övriga programmerare följande kodsnutt?

for (foo=0 ; foo < bar.length()/2 ; ++foo )					
	if (bar.charAt(foo) != bar.charAt(bar.length()-1-foo) )
          comparison=false;
Peter SMedlem sedan dec. 20025 483 inlägg
#2

Som en loop vars syfte är att undersöka huruvida en sträng är ett palindrom.

:)

PersianBulldogMedlem sedan aug. 20023 005 inlägg
#3

Tack för ditt svar, Peter. :)

Kan du ge en lite mer ingående förklaring i hur du märkte det? Är det så att:
foo nollställs för att som en räknare placeras i strängens första position? Vad händer sen?

cyprysMedlem sedan dec. 20003 563 inlägg
#4

foo=0 ; foo < bar.length()/2 ; ++foo
forloopen ska snurra hälften av längden på strängen bar.

bar.charAt(foo) != bar.charAt(bar.length()-1-foo)
Vi jämför tecken "foo" med tecken sista tecken i bar, minus "foo". Alltså kommer det alltid jämföras tecken för tecken början utifrån mot mitten.
Där kommer man på varför loopen går bara till mitten.

if (ovan)
Såfort två tecken inte stämmer överens sätts comparison = false. Alltså ett test om bar = palindrom.

Peter SMedlem sedan dec. 20025 483 inlägg
#5

Jag började med att konstatera att loopen endast kommer att köras strängens längd dividerat med två gånger.

Därefter insåg jag att vänsterledet i jämförelseuttrycket kontrollerar första halvan i stigande positionsordning av strängen, samt högerledet den andra halvan i fallande.

:)

PersianBulldogMedlem sedan aug. 20023 005 inlägg
#6

En eloge och ett stort tack till Daniel och Peter för den fina beskrivningen. :)

Tyvärr kan jag inte acceptera båda svaren, så jag tar den som postades först.

R. Martin? :OO

135 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)