Rails を学んだので、Ruby の知識を広げたいと思っています。そこで、Ruby で C++ の演習を行っています。具体的には、文字列に部分文字列が存在するかどうかを確認する必要があります。もしそうなら、開始インデックスを返す必要があります。存在しない場合は -1 を返します。C++ に非常によく似た Ruby ソリューションを思いついたのですが、Ruby に「より優れた」より慣用的なソリューションがあるかどうか疑問に思っていました。
C++
int find(char str[], char sub_str[])
{
int str_length = strlen(str);
int sub_str_length = strlen(sub_str);
bool match = false;
for(int i=0; i<str_length; i++)
{
if(str[i] == sub_str[0])
{
for(int j=1; j<sub_str_length; j++)
{
if(str[i+j] == sub_str[j])
match = true;
else
{
match = false;
break;
}
}
if(match)
return i;
}
}
return -1;
}
ルビー
def find_sub_str(str, sub_str)
match = false
for i in 0...str.length
if str[i] == sub_str[0]
for j in 1...sub_str.length
if str[i+j] == sub_str[j]
match = true
else
match = false
break
end
end
if match == true
return i
end
end
end
return -1
end