
19.02.2011, 21:17
|
Профессор
|
|
Регистрация: 07.01.2011
Сообщений: 582
|
|
Vulkan
Вот как, например, должна выглядеть вторая функция:
String.prototype.index = function (str) {
var j = -1, c = false, L1 = this.length, L2 = str.length - 1;
for (var i = 0; i < L1; i++) {
if (str.charAt(0) === this.charAt(i))
c = true, j = i;
if (c && i === j + L2)
return j;
if (c && str.charAt(i) != this.charAt(i + j))
c = false;
}
return j;
};
К своему стыду могу сказать, что эта задача потребовала от меня много усилий, это наверно из-за рисперидона. Оставляю Вам возможность решить первую задачу и вернуть звание дурачка обратно мне.
|
|

19.02.2011, 21:28
|
Особый гость
|
|
Регистрация: 02.04.2010
Сообщений: 4,260
|
|
Зачем все так усложнять?
String.prototype.sepa = function(str, sep) {
return this.replace(new RegExp(str, 'g'), sep);
};
alert('1 2 3 4 5'.sepa(' ', '-'));
Сообщение от Matre
|
Вот как, например, должна выглядеть вторая функция:
|
String.prototype.index = function(str) {
return [this].join().search(str);
};
alert('1 2 3 4 5'.index('4'));
Последний раз редактировалось monolithed, 19.02.2011 в 21:43.
|
|

19.02.2011, 21:33
|
 |
⊞ Развернуть
|
|
Регистрация: 11.01.2010
Сообщений: 1,810
|
|
Сообщение от Matre
|
Вот как, например, должна выглядеть вторая функция:
|
Это функция
Сообщение от Matre
|
разделения строки на массив по разделителю (аналог String.prototype.split)
|
? В то же время это ни разу не аналог String.prototype.indexOf
String.prototype.index = function (str) {
var j = -1, c = false, L1 = this.length, L2 = str.length - 1;
for (var i = 0; i < L1; i++) {
if (str.charAt(0) === this.charAt(i))
c = true, j = i;
if (c && i === j + L2)
return j;
if (c && str.charAt(i) != this.charAt(i + j))
c = false;
}
return j;
};
var s1 = 'aababaO_o',
l1 = 'aba', l2 = 'abac', l3 = 'aa', l4 = 'O_o';
alert( [
[s1.index(l1), s1.indexOf(l1)],
[s1.index(l2), s1.indexOf(l2)],
[s1.index(l3), s1.indexOf(l3)],
[s1.index(l4), s1.indexOf(l4)]
].join('\n') )
Последний раз редактировалось B@rmaley.e><e, 19.02.2011 в 21:36.
|
|

20.02.2011, 10:58
|
Профессор
|
|
Регистрация: 07.01.2011
Сообщений: 582
|
|
monolithed
Цитата:
|
Встроенные функции использовать запрещено
|
B@rmaley.e><e
Всё ведь работает.
|
|

20.02.2011, 11:06
|
 |
Профессор
|
|
Регистрация: 25.05.2010
Сообщений: 511
|
|
По поводу своих вариантов - и правда забыл что в качестве параметров могут ещё и строки из нескольких символов передаваться, как время будет исправлю.
Matre, результаты работы твоей функции отличаются от результатов работы встроенной.
|
|

20.02.2011, 11:31
|
 |
⊞ Развернуть
|
|
Регистрация: 11.01.2010
Сообщений: 1,810
|
|
Сообщение от Matre
|
Всё ведь работает.
|
Где работает? Результаты совпали только в одном случае.
|
|

20.02.2011, 12:10
|
Профессор
|
|
Регистрация: 07.01.2011
Сообщений: 582
|
|
Цитата:
|
результаты работы твоей функции отличаются от результатов работы встроенной.
|
Цитата:
|
Где работает? Результаты совпали только в одном случае.
|
Не понял... Вы это имеете ввиду?
|
|

20.02.2011, 12:50
|
 |
⊞ Развернуть
|
|
Регистрация: 11.01.2010
Сообщений: 1,810
|
|
|
|

20.02.2011, 13:14
|
Профессор
|
|
Регистрация: 07.01.2011
Сообщений: 582
|
|
Какой-то чудной у Вас браузер.
|
|

20.02.2011, 14:32
|
 |
Профессор
|
|
Регистрация: 27.05.2010
Сообщений: 33,138
|
|
Вариант...
String.prototype.index = function (b) {
for (var a = -1, d = this.length, c = 0; c < d; c++) {
if (b.length > d) break;
a++;
a = b.charAt(a) === this.charAt(c) ? a : b.charAt(0) === this.charAt(c) ? 0 : -1;
if (a == b.length - 1) return c - b.length + 1
}
return a
};
var s1 = 'aababaO_o',
l1 = 'aba', l2 = 'abac', l3 = 'aa', l4 = 'O_o';
alert( [
[s1.index(l1), s1.indexOf(l1)],
[s1.index(l2), s1.indexOf(l2)],
[s1.index(l3), s1.indexOf(l3)],
[s1.index(l4), s1.indexOf(l4)]
].join('\n') )
Последний раз редактировалось рони, 20.02.2011 в 14:46.
|
|
|
|