C++ C++;to Ruby:在字符串中查找子字符串
我学习了Rails,现在想扩展我对Ruby的知识。所以我在红宝石中做一些C++练习。具体来说,我需要找出字符串中是否存在子字符串。如果需要,我需要它返回它的起始索引。如果它不存在,则返回-1。我想出了一个非常类似C++的Ruby解决方案,想知道在Ruby中是否有一个更好的,更习惯的解决方案? C++ 您可以使用C++ C++;to Ruby:在字符串中查找子字符串,c++,ruby,C++,Ruby,我学习了Rails,现在想扩展我对Ruby的知识。所以我在红宝石中做一些C++练习。具体来说,我需要找出字符串中是否存在子字符串。如果需要,我需要它返回它的起始索引。如果它不存在,则返回-1。我想出了一个非常类似C++的Ruby解决方案,想知道在Ruby中是否有一个更好的,更习惯的解决方案? C++ 您可以使用String的方法。当匹配失败时,它返回nil,这比返回-1更习惯于Ruby "SubString".index("String") # -> 3 "SubString".ind
String
的方法。当匹配失败时,它返回nil
,这比返回-1更习惯于Ruby
"SubString".index("String") # -> 3
"SubString".index("C++") # -> nil
如果您真的想要这种行为,您可以将其包装在一个返回-1表示零的测试中。您可以使用String
的方法。当匹配失败时,它返回nil
,这比返回-1更习惯于Ruby
"SubString".index("String") # -> 3
"SubString".index("C++") # -> nil
如果您真的想要这种行为,您可以将其封装在一个返回-1表示零的测试中
,它只调用每个
,不引入作用域。因此,0…str.length中的i的变为(0…str.length)。每个都执行| i |
:)
:
nil
,而不是-1
。这是最好的,因为在Ruby中nil
是错误的
#how if we use this solution, it gets the job done in O(n)
given_string = "Replace me with your code!"
chars_given_string = given.split('')
chars_of_substr = "ith".split('')
is_substr = false
ptr = 0
char_given.each do |i|
if ( i == substr[ptr])
ptr += 1
else
ptr = 0
end
is_substr = true if ptr == substr.length
break if ptr == substr.length
end
puts is_substr
,它只调用每个
,不引入作用域。因此,0…str.length中的i的变为(0…str.length)。每个都执行| i |
:)
:
当没有匹配项时,#2和#3都返回
nil
,而不是-1
。这是最好的,因为<代码> nIL/COD>是Ruby中的Falsie./P>,真的,真的想要它。我检测到C++的攻击,即使我们有<代码> AutoCindex=S1. find(S2);<代码>和在c++14中的“子字符串”s.find(“字符串”)代码>——在你问之前,真的,真的想要它。我检测到C++的攻击,即使我们有<代码> AutoCindex=S1. find(S2);<代码>和在c++14中的“子字符串”s.find(“字符串”)
-在您询问之前,.Ruby实现了许多通用的字符串
,数组
例程,这些例程直接作为内置类上的方法。要学习习惯性的Ruby,你会想延伸到一些更高层次的商业逻辑中——比如使用这个字符串匹配来提供HTML中的术语的例程。最好的办法是假装你不知道任何C++,它会让你误入歧途。你学会了Rails而不知道露比?你不知道Rails,你只知道如何配置它的一部分,没有Ruby就没有Rails。不了解Ruby的Rails是一条非常陡峭的学习曲线,仅限于配置东西,而不是编写控制器、编写视图或定义模型的操作。即使Rails中的DSL也需要少量Ruby,否则语法将毫无意义,使用块也没有意义。一旦有人开始理解Ruby,他们实际上可以变得富有创造力和生产力。没有红宝石,别人只是鹦鹉学舌,我极力建议不要尝试学习基于C++练习的Ruby,一种相当高级的语言,它教一种相当低级的语言。C和C++比汇编语言更接近汇编程序;从Perl学习Ruby将是一个更接近的匹配。我已经把它们全部写了下来,而且每种语言的功能的发展以及我们在其中的想法,都导致了C++ Ruby的巨大鸿沟。如果你想尝试一下,我建议你考虑的不仅仅是通过索引来搜索字符串中的字符——这是汇编程序的想法,而且要专注于更高级的函数。这就是Andrew回答的要点。Ruby实现了许多通用的字符串
,数组
例程,这些例程直接作为内置类上的方法。要学习习惯性的Ruby,你会想延伸到一些更高层次的商业逻辑中——比如使用这个字符串匹配来提供HTML中的术语的例程。最好的办法是假装你不知道任何C++,它会让你误入歧途。你学会了Rails而不知道露比?你不知道Rails,你只知道如何配置它的一部分,没有Ruby就没有Rails。不了解Ruby的Rails是一条非常陡峭的学习曲线,仅限于配置东西,而不是编写控制器、编写视图或定义模型的操作。即使Rails中的DSL也需要少量Ruby,否则语法将毫无意义,使用块也没有意义。一旦有人开始理解Ruby,他们实际上可以变得富有创造力和生产力。没有红宝石,别人只是鹦鹉学舌,我极力建议不要尝试学习基于C++练习的Ruby,一种相当高级的语言,它教一种相当低级的语言。C和C++比汇编语言更接近汇编程序;从Perl学习Ruby将是一个更接近的匹配。我已经把它们全部写了下来,而且每种语言的功能的发展以及我们在其中的想法,都导致了C++ Ruby的巨大鸿沟。如果你想尝试一下,我建议你考虑的不仅仅是通过索引来搜索字符串中的字符——这是汇编程序的想法,而且要专注于更高级的函数。这就是安德鲁回答的要点。另外,使用每个都有助于避免索引也会遇到的“帮助!我已经用完了数组末尾”问题。另外,使用每个都有助于避免索引也会遇到的“帮助!我已经用完了数组末尾”问题。
#how if we use this solution, it gets the job done in O(n)
given_string = "Replace me with your code!"
chars_given_string = given.split('')
chars_of_substr = "ith".split('')
is_substr = false
ptr = 0
char_given.each do |i|
if ( i == substr[ptr])
ptr += 1
else
ptr = 0
end
is_substr = true if ptr == substr.length
break if ptr == substr.length
end
puts is_substr
'foobar'.index('ob') #=> 2
#how if we use this solution, it gets the job done in O(n)
given_string = "Replace me with your code!"
chars_given_string = given.split('')
chars_of_substr = "ith".split('')
is_substr = false
ptr = 0
char_given.each do |i|
if ( i == substr[ptr])
ptr += 1
else
ptr = 0
end
is_substr = true if ptr == substr.length
break if ptr == substr.length
end
puts is_substr