Ruby/Łańcuchy znakowe: Różnice pomiędzy wersjami
Usunięta treść Dodana treść
Nie podano opisu zmian |
|||
Linia 48:
Konkatenacja łańcuchów w C jest bardziej kłopotliwa z powodu konieczności bezpośredniego zarządzania pamięcią:
<
char *s = malloc(strlen(s1)+strlen(s2)+1);
strcpy(s, s1);
Linia 54:
/* ... */
free(s);
</syntaxhighlight>
W Rubim natomiast, nie musimy w ogóle zastanawiać się nad miejscem zajmowanym w pamięci przez łańcuch. Jesteśmy wolni od jakiegokolwiek zarządzania pamięcią.
Linia 62:
Konkatenacja:
<
slowo = "fo" + "o"
puts slowo #=> "foo"
</syntaxhighlight>
Powtórzenie:
<
slowo = slowo * 2
puts slowo #=> "foofoo"
</syntaxhighlight>
Ekstrahowanie znaków (zauważ, że znaki w Rubim są liczbami całkowitymi):
<
puts slowo[0] #=> 102
# 102 jest kodem ASCII znaku `f'
Linia 82:
puts slowo[-1] #=> 111
# 111 jest kodem ASCII znaku `o'
</syntaxhighlight>
(Wartości ujemne oznaczają liczbę znaków od końca łańcucha.)
Linia 88:
Ekstrahowanie podłańcuchów:
<
warzywo = "pietruszka"
puts warzywo[0,1] #=> "p"
Linia 94:
puts warzywo[0..3] #=> "piet"
puts warzywo[-5..-2] #=> "uszk"
</syntaxhighlight>
Sprawdzanie równości:
<
puts "foo" == "foo" #=> true
puts "foo" == "bar" #=> false
</syntaxhighlight>
Zróbmy użytek z kilku tych cech. Oto zgadywanka "co to za słowo", ale być może słowo "zgadywanka" to zbyt dużo dla tego kodu. ;-)
<
# zapisz to jako zgadnij.rb
slowa = ['fiolek', 'roza', 'bez']
Linia 122:
end
puts "Chodzilo o " + sekret + "."
</syntaxhighlight>
Na razie nie przejmuj się za bardzo szczegółami powyższego kodu. Oto jak wygląda uruchomiona łamigłówka.
|