• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Porównywanie stringa

Object Storage Arubacloud
0 głosów
304 wizyt
pytanie zadane 9 czerwca 2015 w Ruby przez Jejkej Obywatel (1,030 p.)

Witam, mam mały problem i pomimo poszukiwań nie do końca znalazłem odpowiedź w internecie, więc zwracam się do was. Otóż w jaki sposób można łatwiej no i nie "na siłe" jak ja to zrobiłem sprawdzić czy w stringu podanym przez użytkownika są cyfry ( a może nawet czy składa sie tylko z cyfr)?

choice = $stdin.gets.chomp

 if (choice.include?("0") || choice.include?("1") || choice.include?("2") || choice.include?("3") || choice.include?("4") || choice.include?("5") || choice.include?("6") || choice.include?("7") || choice.include?("7") || choice.include?("9"))
...

 

2 odpowiedzi

+1 głos
odpowiedź 9 czerwca 2015 przez Comandeer Guru (602,340 p.)
wybrane 10 czerwca 2015 przez Jejkej
 
Najlepsza

A może regularne (od razu uprzedzam, że nie pisuję w Ruby!)?

if(/\d/.match(choice))

 

komentarz 10 czerwca 2015 przez Jejkej Obywatel (1,030 p.)
Dzięki wielkie! To rozwiązanie działa, ale zastanawiam się jeszcze co zrobić, by tylko i wyłącznie gdy w choice są tylko same cyfry if zwracał true.
komentarz 10 czerwca 2015 przez Comandeer Guru (602,340 p.)

No to wtedy takie regularne jeśli mnie pamięć nie myli:

/^\d+$/

Wgl polecam poczytać o wyrażeniach regularnych, bo to potężna zabawka. No i baw się na http://rubular.com/ ;)

komentarz 10 czerwca 2015 przez Jejkej Obywatel (1,030 p.)

doszedłem sam do czegoś takiego:

if(!(choice =~ /\D/))

i działa ładnie :) . Dziękuje wszystkim za pomoc! Rzeczywiście wyrażenia mam troche do nadrobienia jeśli chodzi o wyrażenia regularne.

komentarz 10 czerwca 2015 przez Comandeer Guru (602,340 p.)

Zauważ, że Twój regex działa na odwrót: sprawdza czy string to sam tekst ;)

\d oznacza cyfrę, natomiast \D niecyfrę

komentarz 10 czerwca 2015 przez Jejkej Obywatel (1,030 p.)

popraw mnie, jeśli się mylę, ale czy jeżeli dam

if(choice =~ /\D/)

to zwróci prawdę, jeżeli choice "składa się" tylko z niecyfr , więc

	
if(!(choice =~ /\D/))

zwróci prawdę, gdy skłąda się tylko i wyłącznie z cyfr (fałsz, jeżeli w stringu jest chciaż jeden znak inny niż cyfra)?

komentarz 10 czerwca 2015 przez Comandeer Guru (602,340 p.)

Hm… W sumie to nie, bo testujesz tylko jeden znak. Polecam spojrzeć na ten kod:

if('a41' =~ /\D/)
then
	puts 'Nie ma cyfr';
end;

if('asgs' =~ /^\D+$/)
then
	puts 'NAPRAWDĘ nie ma cyfr';
end;

W sumie niegłupi ten Ruby i szybko się go przyswaja :D

komentarz 10 czerwca 2015 przez Jejkej Obywatel (1,030 p.)
Dziękuę Bardzo za pomoc :) Masz całkowitą rację! Nie do końca to przemyślałem. A co do Ruby - bardzo przyjemny i łatwy do nauki, polecam :D
0 głosów
odpowiedź 9 czerwca 2015 przez waldi95 Początkujący (260 p.)

A mam pytanko, co to za język? Bo nie kojarzę tej funkcji choice.include


for (int i = 0; i<=9; i++)
{
if (choice.include?(i)
...
}

Co do tego, aby sprawdzić czy string zawiera same cyfry to:

for(int i=0;i<=9;i++)
{
  if (!choice.include?(i))
{
 tylko_cyfry = false;
}
...
}

komentarz 9 czerwca 2015 przez Jejkej Obywatel (1,030 p.)
Podałem w tagach - Ruby.
komentarz 9 czerwca 2015 przez criss Mędrzec (172,590 p.)
W taki sposob na pewno wywali blad. Nie znam Ruby, ale nie sadze zeby include() przyjmowala inty
komentarz 9 czerwca 2015 przez waldi95 Początkujący (260 p.)
Przeoczyłęm, przepraszam.
Jeśli nie przyjmuje, to może można przekonwertować tego inta już w pętli.
komentarz 9 czerwca 2015 przez Jejkej Obywatel (1,030 p.)
Nie wywala żadnego błędu (Ruby v 2.1.6). Tak jak napisałem, przyjmuje raczej liczby, ale jako string, ja szukam jakiejś możliwie krótkiej metody aby zobaczyć, czy ten string składa się tylko i wyłącznie z cyfr.
komentarz 9 czerwca 2015 przez waldi95 Początkujący (260 p.)

Nie zadziała to co napisałem? Chyba że coś źle zrozumiałem.
 

for(int i=0;i<=9;i++) 
{ 
  if (!choice.include?(i)) 
{ 
 tylko_cyfry = false; 
} 
}
... 

 

Podobne pytania

0 głosów
1 odpowiedź 2,001 wizyt
pytanie zadane 10 września 2019 w JavaScript przez 42savage Bywalec (2,630 p.)
0 głosów
3 odpowiedzi 4,068 wizyt
0 głosów
1 odpowiedź 149 wizyt
pytanie zadane 9 lipca 2023 w Ruby przez whiteman808 Obywatel (1,870 p.)

92,631 zapytań

141,495 odpowiedzi

319,863 komentarzy

62,011 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...