0
? substr(s,n,m)=concat(Vec(s)[n..n+m-1])
%1 = (s,n,m)->concat(Vec(s)[n..n+m-1])
? s="h0getcwdfailedNosuchfileordirectory"
%2 = "h0getcwdfailedNosuchfileordirectory"
? substr(s,4,8)
%3 = "etcwdfai"

Question: Is there a better way (built-in function?) to get substring in PARI/gp?

g.kov
  • 333
  • 2
  • 10

1 Answers1

2

Not really. Here's a faster hack (also using less memory)

substr2(s,n,m)=strchr(Vecsmall(s)[n..n+m-1])

Timing this on your example:

? substr2(s,4,8)
%1 = "etcwdfai"
? for(i=1,10^6,substr(s,4,8))
time = 536 ms.
? for(i=1,10^6,substr2(s,4,8))
time = 266 ms.
K.B.
  • 861
  • 5
  • 14