- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
void delslovo(char *a)
{
static int i = 0;
static bool j = false;
if (a[i++] != '\0') delslovo(a);
else i--;
if (!j)
{
if (a[i] != ' '&&a[i] != '\n'&&a[i] != '\0')
{
j = true;
i++;
}
}
if (j)
{
if (a[i - 1] == ' ') return;
a[i - 1] = a[i];
}
i--;
}
Оно на второй раз вообще работает?
кэши в любом случае надо выносить за пределы функции, потому что рано или поздно понадобится делать сброс кэша. рано или поздно - многопоточность нагрянет.
я первый раз с TLS грабли видел как раз как чудаки в одной либе только начали пользоватся TLS, и обнаружили крутой эффект что значения пропадают. (в тесте работало на ура - в продакшене вообще ни разу.) выяснилось что работа идет через тред пул, и в каком именно потоке что/когда вызовется просто не известно. повезло что этих идиотов один архитект перехватил и TLS в текущем релизе запретил - потому что они уже начали тред пул расхуячивать, что бы для одной сессии только один поток использовался. "патаму что эта тред пул винават что наша ТэЛэСэ не работает!"
пятница, жара, хочу пива - сдался. как это вообще должно работать? у меня мозги из этой рекурсии не выходят.
далее на выходе из рекурсии пропускает пробелы и двигается в обратную сторону, встречает символ и на его место записывает пробел справа, это выполняется пока не встретится пробел(=> слово удалено)
много воды утекло с того момента когда писал это на первом курсе. помнится ушло на этот говнокод 15минут. задание было: реализовать функцию удаляющую последнее слово, в функцию передается лишь строка. другие функции использовать нельзя и желательно сделать это рекурсией (тк препод любил когда что-то делают рекурсивно)
препод сам завис когда этот говнокод с листика компилировал, поспорил с ним что оно работает - набрал на пека, запустил - выдало нужный результат. естественно только при первом использовании функции