Revision 77cfc057-f25e-47fd-bf4c-451d1a135936 - Code Golf Stack Exchange

# [C (gcc)], <s>115</s> <s>112</s> <s>109</s> <s>107</s> 104 bytes

<!-- language-all: lang-c -->

 f(n,s,l,p,d)char*s;{d=n<0?-1:1;do for(l=1,p=0;p>=0;p+=l)s[p]?d==l&&putchar(s[p]):l--;while(!n||(n-=d));}

[Try it online!][TIO-j49jb8ag]

> Who said, we need `strlen`?

[C (gcc)]: https://gcc.gnu.org/
[TIO-j49jb8ag]: https://tio.run/##VY6xbsIwEIb3PMWVSmAXW3KidolrMiDBytClKgwoThpLV9tKQhlCnj21UVvBDTd8n/7/ruSfZTlNNbGsY8g807Rsju1TJwet7KsoeJqnUjuoXUtQpcwrIf0qrqVC2n34Q6GVwvncn/qYJBHRHDmX58ZgRR7s5UIsV5pSOU6PuqqNrWATD1IIxQPsE/id8EZh8@csKHmD/6oXe7u4ihGu3UAETRJje/g6Gku@ndEUhv/YhrwwmDUVooOza1HPqLyRIsjdbr29pzwLuG9Pb837vciEiAkX6Tj9AA "C (gcc) – Try It Online"

## [C (gcc)], 115 bytes (134 with `#include<string.h>` in front)

<!-- language-all: lang-c -->

 #include<string.h>
 f(n,s)char*s;{int l=strlen(s),d=n<0?0:2,m=d--,p;do for(p=m?0:l-1;p!=(m?l:-1);p+=d)putchar(s[p]);while(!n||(n-=d));}

[Try it online!][TIO-j49hgk2j]

> Without `#include<string.h>` we get an implicit prototype for `strlen` that returns `int`, but `strlen` is `size_t` (at least nowadays, not perfectly sure about k&r or c89, but I believe, it returned `int` in the old days).

> The missing `#include <stdio.h>` isn't a problem, because due to integer promotion, the default prototype will be `int putchar(int)` which is exactly what we want.

[C (gcc)]: https://gcc.gnu.org/
[TIO-j49hgk2j]: https://tio.run/##VY49b8IwFEX3/IoHDNhtXJmoXWLcDJXoytClKgwodogl59nKRxlCfnvqRG0FbzxH976bs3Oej@PKYG47pbdNWxs8P5WvUUEwbmhenuqHRvQGW7AyWKuRNDRWErc842kSV1IxFnuhHBSuJl5WAVu2EX4hSZXZlG2o8I9SUd@1Ux1pvvyRiktprCYLvF4JsmCpGMaV0oVBDbv5N4TKHg4R/F5YlGH6nAQlbvBf7fqA61kMMHcD4TSKpuHVySD5dkZR6P9jO/ISw7LU1jq4uNqqJRU3kge537@931OWBNzW3Uf5eS8SzqeEm@gw/gA "C (gcc) – Try It Online"

AltStyle によって変換されたページ (->オリジナル) /