Repeat a string: Difference between revisions

 
(334 intermediate revisions by more than 100 users not shown)
Line 1:
{{task|String manipulation}}Take a string and repeat it some number of times. Example: repeat("ha", 5) => "hahahahaha"
 
Take a string and repeat it some number of times.
 
Example: repeat("ha", 5)   =>   "hahahahaha"
 
If there is a simpler/more efficient way to repeat a single “character” (i.e. creating a string filled with a certain character), you might want to show that as well (i.e. repeat-char("*", 5) => "*****").
 
 
{{Template:Strings}}
<br><br>
 
=={{header|11l}}==
<syntaxhighlight lang="11l">print(‘ha’ * 5)</syntaxhighlight>
 
{{out}}
<pre>
hahahahaha
</pre>
 
=={{header|360 Assembly}}==
<syntaxhighlight lang="360asm">* Repeat a string - 19/04/2020
REPEATS CSECT
USING REPEATS,R13 base register
B 72(R15) skip savearea
DC 17F'0' savearea
SAVE (14,12) save previous context
ST R13,4(R15) link backward
ST R15,8(R13) link forward
LR R13,R15 set addressability
XPRNT C24,24 print c24
LA R1,PARMLST pg=repeat(cx,ii) - repeat('abc ',6)
BAL R14,REPEAT call repeat
XPRNT PG,L'PG print pg
L R13,4(0,R13) restore previous savearea pointer
RETURN (14,12),RC=0 restore registers from calling save
REPEAT CNOP 0,4 procedure repeat(b,a,i)
STM R2,R8,REPEATSA save registers
L R2,0(R1) @b=%r1
L R3,4(R1) @a=%(r1+4)
L R4,8(R1) @i=%(r1+8)
LR R5,R3 length(a) before a
SH R5,=H'2' @lengh(a)
LH R6,0(R5) l=length(a)
LR R7,R6 l
BCTR R7,0 l-1
L R8,0(R4) i=%r4
LTR R8,R8 if i<=0
BNP RET then return
LOOP EX R7,MVCX move a to b len R6
AR R2,R6 @b+=l
BCT R8,LOOP loop i times
RET LM R2,R8,REPEATSA restore registers
BR R14 return
PARMLST DC A(PG,CX,II) parmlist
REPEATSA DS 7F local savearea
MVCX MVC 0(0,R2),0(R3) move @ R3 to @ R2
C24 DC 6C'xyz ' constant repeat - repeat('xyz ',6)
LCX DC AL2(L'CX) lengh(cc)
CX DC CL4'abc ' cx
II DC F'6' ii
PG DC CL80' ' pg
REGEQU
END REPEATS </syntaxhighlight>
{{out}}
<pre>
xyz xyz xyz xyz xyz xyz
abc abc abc abc abc abc
</pre>
 
=={{header|4DOS Batch}}==
<langsyntaxhighlight lang="4dos">gosub repeat ha 5
echo %@repeat[*,5]
quit
Line 13 ⟶ 79:
enddo
echo.
return</langsyntaxhighlight>
Output shows:
<pre>hahahahaha
*****</pre>
 
=={{header|6502 Assembly}}==
<syntaxhighlight lang="6502asm">CHROUT equ $FFD2 ;KERNAL call, prints the accumulator to the screen as an ascii value.
 
org $0801
 
 
db $0E,$08,$0A,$00,$9E,$20,$28,$32,$30,$36,$34,$29,$00,$00,$00
 
 
 
lda #>TestStr
sta $11
lda #<TestStr
sta $10
 
ldx #5 ;number of times to repeat
 
loop:
jsr PrintString
dex
bne loop
 
RTS ;RETURN TO BASIC
PrintString:
ldy #0
loop_PrintString:
lda ($10),y ;this doesn't actually increment the pointer itself, so we don't need to back it up.
beq donePrinting
jsr CHROUT
iny
jmp loop_PrintString
donePrinting:
rts
TestStr:
db "HA",0</syntaxhighlight>
{{out}}
<pre>
READY.
LOAD"*",8,1:
 
SEARCHING FOR *
LOADING
READY.
RUN
HAHAHAHAHA
READY.
</pre>
 
=={{header|68000 Assembly}}==
Easiest way to do this is with a loop.
<syntaxhighlight lang="68000devpac">MOVE.W #5-1,D1
RepString:
LEA A3, MyString
MOVE.L A3,-(SP) ;PUSH A3
JSR PrintString ;unimplemented hardware-dependent printing routine, assumed to not clobber D1
MOVE.L (SP)+,A3 ;POP A3
DBRA D1,RepString
RTS ;return to basic or whatever
 
MyString:
DC.B "ha",0
even</syntaxhighlight>
 
=={{header|8080 Assembly}}==
<syntaxhighlight lang="asm8080"> org 100h
jmp demo
 
; Repeat the string at DE into HL, B times
repeat: mvi c,'$' ; string terminator
xra a ; repeat 0x?
ora b
mov m,c ; then empty string
rz
rpt1: push d ; save begin of string to repeat
chcpy: ldax d ; copy character from input to output
mov m,a
inx d ; advance pointers
inx h
cmp c ; end of string?
jnz chcpy
pop d ; restore begin of string to repeat
dcx h ; move back past terminator in copy
dcr b ; done yet?
jnz rpt1 ; if not add another copy
ret
 
demo: lxi d,ha ; get string to repeat
lxi h,buf ; place to store result
mvi b,5 ; repeat 5 times
call repeat
lxi d,buf ; print result using CP/M call
mvi c,9
jmp 5
 
ha: db 'ha$' ; string to repeat
buf: ds 32 ; place to store repeated string</syntaxhighlight>
{{out}}
<pre>hahahahaha</pre>
=={{header|8th}}==
<syntaxhighlight lang="forth">"ha" 5 s:*
. cr</syntaxhighlight>
Output shows:
<pre>hahahahaha</pre>
 
=={{header|ABAP}}==
This works for ABAP Version 7.40 and above
 
<syntaxhighlight lang="abap">
report z_repeat_string.
 
write repeat( val = `ha` occ = 5 ).
</syntaxhighlight>
 
{{out}}
<pre>
hahahahaha
</pre>
 
=={{header|Action!}}==
<syntaxhighlight lang="action!">Proc Main()
byte REPEAT
 
REPEAT=5
Do
Print("ha")
REPEAT==-1
Until REPEAT=0
Do
 
Return</syntaxhighlight>
{{out}}
<pre>hahahahaha</pre>
 
=={{header|ActionScript}}==
Line 22 ⟶ 230:
 
In Flex, there is the method [http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/utils/StringUtil.html#repeat%28%29 mx.utils.StringUtil.repeat()].
 
===Iterative version===
<langsyntaxhighlight ActionScriptlang="actionscript">function repeatString(string:String, numTimes:uint):String
{
var output:String = "";
Line 29 ⟶ 238:
output += string;
return output;
}</langsyntaxhighlight>
 
===Recursive version===
The following double-and-add method is much faster when repeating a string many times.
<langsyntaxhighlight ActionScriptlang="actionscript">function repeatRecursive(string:String, numTimes:uint):String
{
if(numTimes == 0) return "";
Line 38 ⟶ 248:
var tmp:String = repeatRecursive(string, numTimes/2);
return tmp + tmp;
}</langsyntaxhighlight>
 
===Flex===
<langsyntaxhighlight ActionScriptlang="actionscript">import mx.utils.StringUtil;
trace(StringUtil.repeat("ha", 5));
</syntaxhighlight>
</lang>
Sample Output:
<pre>
Line 50 ⟶ 261:
=={{header|Ada}}==
In [[Ada]] multiplication of an universal integer to string gives the desired result. Here is an example of use:
<langsyntaxhighlight Adalang="ada">with Ada.Strings.Fixed; use Ada.Strings.Fixed;
with Ada.Text_IO; use Ada.Text_IO;
 
Line 56 ⟶ 267:
begin
Put_Line (5 * "ha");
end String_Multiplication;</langsyntaxhighlight>
Sample output:
<pre>
hahahahaha
</pre>
 
=={{header|Aime}}==
<syntaxhighlight lang="aime">call_n(5, o_text, "ha");</syntaxhighlight>
 
=={{header|ALGOL 68}}==
<langsyntaxhighlight lang="algol68">print (5 * "ha")
</syntaxhighlight>
</lang>
 
=={{header|Amazing Hopper}}==
<syntaxhighlight lang="amazing hopper">
#!/usr/bin/hopper
#include <hopper.h>
 
main:
{"ha"}replyby(5), println
{"ha",5}replicate, println
{0}return
</syntaxhighlight>
hahahahaha
hahahahaha
 
=={{header|APL}}==
Fill up a string of length 10 with 'ha':
<syntaxhighlight lang="apl"> 10⍴'ha'
hahahahaha</syntaxhighlight>
Alternatively, define a function:
<syntaxhighlight lang="apl"> REPEAT←{(⍺×⍴⍵)⍴⍵}
5 REPEAT 'ha'
hahahahaha</syntaxhighlight>
 
=={{header|AppleScript}}==
<langsyntaxhighlight AppleScriptlang="applescript">set str to "ha"
set final_string to ""
repeat 5 times
set final_string to final_string & str
end repeat</langsyntaxhighlight>
 
 
For larger numbers of repetitions, however, it proves significantly faster to progressively double a copy of the original string (concatenating it with itself). Intermediate stages of doubling are appended to an accumulator wherever required for binary composition of the target number.
 
See the technique of 'Egyptian Multiplication' described in the Rhind Mathematical Papyrus at the British Museum.
 
{{trans|JavaScript}}
<syntaxhighlight lang="applescript">replicate(5000, "ha")
 
-- Repetition by 'Egyptian multiplication' -
-- progressively doubling a list, appending
-- stages of doubling to an accumulator where needed for
-- binary assembly of a target length.
 
-- replicate :: Int -> String -> String
on replicate(n, s)
set out to ""
if n < 1 then return out
set dbl to s
repeat while (n > 1)
if (n mod 2) > 0 then set out to out & dbl
set n to (n div 2)
set dbl to (dbl & dbl)
end repeat
return out & dbl
end replicate</syntaxhighlight>
 
=={{header|Applesoft BASIC}}==
<syntaxhighlight lang="applesoftbasic">FOR I = 1 TO 5 : S$ = S$ + "HA" : NEXT
 
? "X" SPC(20) "X"</syntaxhighlight>
Output:
<pre>X X</pre>
 
=={{header|Arturo}}==
<syntaxhighlight lang="rebol">print repeat "ha" 5</syntaxhighlight>
 
{{out}}
 
<pre>hahahahaha</pre>
 
=={{header|AutoHotkey}}==
<langsyntaxhighlight AutoHotkeylang="autohotkey">MsgBox % Repeat("ha",5)
 
Repeat(String,Times)
Line 82 ⟶ 358:
Output .= String
Return Output
}</langsyntaxhighlight>
 
=={{header|AutoIt}}==
<syntaxhighlight lang="autoit">#include <String.au3>
 
ConsoleWrite(_StringRepeat("ha", 5) & @CRLF)</syntaxhighlight>
 
=={{header|AWK}}==
<langsyntaxhighlight lang="awk">function repeat( str, n, rep, i )
{
for( ; i<n; i++ )
Line 93 ⟶ 375:
BEGIN {
print repeat( "ha", 5 )
}</langsyntaxhighlight>
 
=={{header|Babel}}==
<syntaxhighlight lang="babel">main: { "ha" 5 print_repeat }
 
print_repeat!: { <- { dup << } -> times }</syntaxhighlight>
Outputs:
<syntaxhighlight lang="babel">hahahahaha</syntaxhighlight>
The '<<' operator prints, 'dup' duplicates the top-of-stack, 'times' does something x number of times. The arrows mean down (<-) and up (->) respectively - it would require a lengthy description to explain what this means, refer to the doc/babel_ref.txt file in the github repo linked from [[Babel]]
 
=={{header|BaCon}}==
To repeat a string:
<syntaxhighlight lang="qbasic">DOTIMES 5
s$ = s$ & "ha"
DONE
PRINT s$</syntaxhighlight>
{{out}}
<pre>
hahahahaha
</pre>
To repeat one single character:
<syntaxhighlight lang="qbasic">PRINT FILL$(5, ASC("x"))</syntaxhighlight>
{{out}}
<pre>
xxxxx
</pre>
 
 
=={{header|BASIC}}==
==={{header|BASIC256}}===
<syntaxhighlight lang="basic256">function StringRepeat$ (s$, n)
cad$ = ""
for i = 1 to n
cad$ += s$
next i
return cad$
end function
 
print StringRepeat$("rosetta", 1)
print StringRepeat$("ha", 5)
print StringRepeat$("*", 5)
end</syntaxhighlight>
 
==={{header|Chipmunk Basic}}===
{{works with|Chipmunk Basic|3.6.4}}
<syntaxhighlight lang="qbasic">100 cls
110 print stringrepeat$("rosetta",1)
120 print stringrepeat$("ha",5)
130 print stringrepeat$("*",5)
140 end
150 function stringrepeat$(s$,n)
160 cad$ = ""
170 for i = 1 to n
180 cad$ = cad$+s$
190 next i
200 stringrepeat$ = cad$
210 end function</syntaxhighlight>
 
==={{header|GW-BASIC}}===
{{works with|Applesoft BASIC}}
{{works with|PC-BASIC|any}}
{{works with|BASICA}}
{{works with|Chipmunk Basic}}
{{works with|QBasic}}
{{works with|MSX BASIC}}
<syntaxhighlight lang="qbasic">100 CLS : rem 100 HOME for Applesoft BASIC
110 S$ = "rosetta" : N = 1
120 GOSUB 210
130 PRINT CAD$
140 S$ = "ha" : N = 5
150 GOSUB 210
160 PRINT CAD$
170 S$ = "*" : N = 5
180 GOSUB 210
190 PRINT CAD$
200 END
210 REM FUNCTION STRINGREPEAT$(S$,N)
220 CAD$ = ""
230 FOR I = 1 TO N
240 CAD$ = CAD$+S$
250 NEXT I
260 RETURN</syntaxhighlight>
 
==={{header|Minimal BASIC}}===
{{works with|Quite BASIC}}
<syntaxhighlight lang="qbasic">100 REM Repeat a string
110 LET S$ = "rosetta"
120 LET N = 1
130 GOSUB 210
140 LET S$ = "ha"
150 LET N = 5
160 GOSUB 210
170 LET S$ = "*"
180 LET N = 5
190 GOSUB 210
200 STOP
210 REM FUNCTION StringRepeat$(S$,N)
220 FOR I = 1 TO N
230 PRINT S$;
240 NEXT I
250 PRINT
260 RETURN
270 END</syntaxhighlight>
 
==={{header|MSX Basic}}===
{{works with|MSX BASIC|any}}
The [[#GW-BASIC|GW-BASIC]] solution works without any changes.
 
==={{header|QBasic}}===
<syntaxhighlight lang="qbasic">FUNCTION StringRepeat$ (s$, n)
cad$ = ""
FOR i = 1 TO n
cad$ = cad$ + s$
NEXT i
StringRepeat$ = cad$
END FUNCTION
 
PRINT StringRepeat$("rosetta", 1)
PRINT StringRepeat$("ha", 5)
PRINT StringRepeat$("*", 5)
END</syntaxhighlight>
 
==={{header|Quite BASIC}}===
{{works with|BASICA}}
{{works with|Chipmunk Basic}}
{{works with|GW-BASIC}}
{{works with|MSX BASIC}}
{{works with|PC-BASIC|any}}
{{works with|QBasic}}
<syntaxhighlight lang="qbasic">100 CLS
110 LET S$ = "rosetta"
115 LET N = 1
120 GOSUB 210
130 PRINT C$
140 LET S$ = "ha"
145 LET N = 5
150 GOSUB 210
160 PRINT C$
170 LET S$ = "*"
175 LET N = 5
180 GOSUB 210
190 PRINT C$
200 END
210 REM FUNCTION STRINGREPEAT$(S$,N)
220 LET C$ = ""
230 FOR I = 1 TO N
240 LET C$ = C$ + S$
250 NEXT I
260 RETURN</syntaxhighlight>
 
==={{header|True BASIC}}===
<syntaxhighlight lang="qbasic">FUNCTION StringRepeat$ (s$, n)
LET cad$ = ""
FOR i = 1 TO n
LET cad$ = cad$ & s$
NEXT i
LET StringRepeat$ = cad$
END FUNCTION
 
PRINT StringRepeat$("rosetta", 1)
PRINT StringRepeat$("ha", 5)
PRINT StringRepeat$("*", 5)
END</syntaxhighlight>
 
==={{header|XBasic}}===
{{works with|Windows XBasic}}
<syntaxhighlight lang="qbasic">PROGRAM "Repeat a string"
VERSION "0.0000"
 
DECLARE FUNCTION Entry ()
DECLARE FUNCTION StringRepeat$ (s$, n)
 
FUNCTION Entry ()
 
PRINT StringRepeat$ ("rosetta", 1)
PRINT StringRepeat$ ("ha", 5)
PRINT StringRepeat$ ("*", 5)
 
END FUNCTION
FUNCTION StringRepeat$ (s$, n)
cad$ = ""
FOR i = 1 TO n
cad$ = cad$ + s$
NEXT i
RETURN cad$
END FUNCTION
END PROGRAM</syntaxhighlight>
 
==={{header|Yabasic}}===
<syntaxhighlight lang="yabasic">sub StringRepeat$ (s$, n)
cad$ = ""
for i = 1 to n
cad$ = cad$ + s$
next i
return cad$
end sub
 
print StringRepeat$("rosetta", 1)
print StringRepeat$("ha", 5)
print StringRepeat$("*", 5)
end</syntaxhighlight>
 
 
=={{header|Batch File}}==
Commandline implementation
<langsyntaxhighlight lang="dos">@echo off
if "%2" equ "" goto fail
setlocal enabledelayedexpansion
Line 104 ⟶ 587:
for /l %%i in (1,1,%num%) do set res=!res!%char%
echo %res%
:fail</langsyntaxhighlight>
 
'Function' version
<langsyntaxhighlight lang="dos">@echo off
set /p a=Enter string to repeat :
set /p b=Enter how many times to repeat :
Line 116 ⟶ 599:
set "c=%c%+=1"
if /i _"%c%"==_"%d%" (exit /b)
goto :a</langsyntaxhighlight>
 
'Function' version 2
<syntaxhighlight lang="dos">@echo off
@FOR /L %%i in (0,1,9) DO @CALL :REPEAT %%i
@echo That's it!
@FOR /L %%i in (0,1,9) DO @CALL :REPEAT %%i
@echo.
@echo And that!
@GOTO END
 
:REPEAT
@echo|set /p="*"
@GOTO:EOF
 
:END</syntaxhighlight>
 
=={{header|BBC BASIC}}==
<langsyntaxhighlight lang="bbcbasic"> PRINT STRING$(5, "ha")</langsyntaxhighlight>
 
=={{header|Brainf***beeswax}}==
<syntaxhighlight lang="beeswax"> p <
Prints "ha" 10 times. Note that this method only works for a number of repetitions that fit into the cell size.
p0~1<}~< d@<
<lang bf>+++++ +++++ init first as 10 counter
_VT@1~>yg~9PKd@M'd;</syntaxhighlight>
[-> +++++ +++++<] we add 10 to second each loopround
 
Now we want to loop 5 times to follow std
+++++
[-> ++++ . ----- -- . +++<] print h and a each loop
 
Example:
and a newline because I'm kind and it looks good
 
+++++ +++++ +++ . --- .</lang>
<pre>julia> beeswax("repeat a string.bswx")
sha
i5
hahahahaha
Program finished!</pre>
<code>s</code> tells the user that the program expects a string as input.
<code>i</code> tells the user that the program expects an integer as input.
 
 
=={{header|Beef}}==
<syntaxhighlight lang="csharp">
String s = new String('X', 5);
s.Replace("X", "ha");
</syntaxhighlight>
 
And for single character repeats
 
<syntaxhighlight lang="csharp">
String s1 = scope .();
s1.PadLeft(5, '*');
</syntaxhighlight>
 
 
=={{header|Befunge}}==
<syntaxhighlight lang="befunge">v> ">:#,_v
>29*+00p>~:"0"- #v_v $
v ^p0p00:-1g00< $ >
v p00&p0-1g00+4*65< >00g1-:00p#^_@</syntaxhighlight>
Input sample:
<pre>ha05</pre>
Input string has to be zero terminated and less than 18 characters.
 
Output sample:
<pre>hahahahaha</pre>
 
=={{header|BQN}}==
 
<code>⥊</code>(reshape) can all by itself be used to repeat a string to a particular length. This function is just a wrapper around it to repeat n times.
 
<syntaxhighlight lang="bqn">Repeat ← ×⟜≠ ⥊ ⊢
 
•Show 5 Repeat "Hello"</syntaxhighlight><syntaxhighlight lang="text">"HelloHelloHelloHelloHello"</syntaxhighlight>
 
=={{header|Bracmat}}==
The code almost explains itself. The repetions are accumulated in a list <code>rep</code>. The <code>str</code> concatenates all elements into a single string, ignoring the white spaces separating the elements.
 
<langsyntaxhighlight lang="bracmat">(repeat=
string N rep
. !arg:(?string.?N)
Line 143 ⟶ 680:
' (!N+-1:>0:?N&!string !rep:?rep)
& str$!rep
);</langsyntaxhighlight>
 
<pre> repeat$(ha.5)
hahahahaha</pre>
 
=={{header|Brainf***}}==
Prints "ha" 10 times. Note that this method only works for a number of repetitions that fit into the cell size.
<syntaxhighlight lang="bf">+++++ +++++ init first as 10 counter
[-> +++++ +++++<] we add 10 to second each loopround
 
Now we want to loop 5 times to follow std
+++++
[-> ++++ . ----- -- . +++<] print h and a each loop
 
and a newline because I'm kind and it looks good
+++++ +++++ +++ . --- .</syntaxhighlight>
 
=={{header|Brat}}==
<langsyntaxhighlight lang="brat">p "ha" * 5 #Prints "hahahahaha"</langsyntaxhighlight>
 
=={{header|Burlesque}}==
<syntaxhighlight lang="burlesque">
blsq ) 'h5?*
"hhhhh"
blsq ) "ha"5.*\[
"hahahahaha"
</syntaxhighlight>
 
=={{header|C}}==
<langsyntaxhighlight lang="c">#include <stdio.h>
#include <stdlib.h>
#include <string.h>
Line 169 ⟶ 726:
 
int main() {
char * result = string_repeat(5, "ha");
puts(result);
free(result);
return 0;
}</langsyntaxhighlight>
A variation.
<langsyntaxhighlight lang="c">...
char *string_repeat(const char *str, int n)
{
char *pa, *pb;
Line 187 ⟶ 744:
while (pa>=dest) *pa-- = *pb--;
return dest;
}</langsyntaxhighlight>
 
To repeat a single character
<langsyntaxhighlight lang="c">#include <stdio.h>
#include <stdlib.h>
#include <string.h>
Line 206 ⟶ 763:
free(result);
return 0;
}</langsyntaxhighlight>
 
If you use [[GLib]], simply use <code>g_strnfill ( gsize length, gchar fill_char )</code> function.
 
=={{header|C sharp}}==
<langsyntaxhighlight lang="csharp">string s = "".PadLeft(5, 'X').Replace("X", "ha");</langsyntaxhighlight>
or (with .NET 2+)
<langsyntaxhighlight lang="csharp">string s = new String('X', 5).Replace("X", "ha");</langsyntaxhighlight>
or (with .NET 2+)
<langsyntaxhighlight lang="csharp">string s = String.Join("ha", new string[5 + 1]);</langsyntaxhighlight>
or (with .NET 4+)
<langsyntaxhighlight lang="csharp">string s = String.Concat(Enumerable.Repeat("ha", 5));</langsyntaxhighlight>
 
To repeat a single character:
<langsyntaxhighlight lang="csharp">string s = "".PadLeft(5, '*');</langsyntaxhighlight>
or (with .NET 2+)
<langsyntaxhighlight lang="csharp">string s = new String('*', 5);</langsyntaxhighlight>
 
=={{header|C++}}==
<langsyntaxhighlight lang="cpp">#include <string>
#include <iostream>
 
Line 237 ⟶ 796:
std::cout << repeat( "Ha" , 5 ) << std::endl ;
return 0 ;
}</langsyntaxhighlight>
 
To repeat a single character:
<langsyntaxhighlight lang="cpp">#include <string>
#include <iostream>
 
Line 246 ⟶ 805:
std::cout << std::string( 5, '*' ) << std::endl ;
return 0 ;
}</langsyntaxhighlight>
 
=== recursive version ===
<syntaxhighlight lang="cpp">#include <string>
#include <iostream>
std::string repeat( const std::string &word, uint times ) {
return
times == 0 ? "" :
times == 1 ? word :
times == 2 ? word + word :
repeat(repeat(word, times / 2), 2) +
repeat(word, times % 2);
}
 
int main( ) {
std::cout << repeat( "Ha" , 5 ) << std::endl ;
return 0 ;
}</syntaxhighlight>
 
=={{header|Ceylon}}==
<syntaxhighlight lang="ceylon">shared void repeatAString() {
print("ha".repeat(5));
}</syntaxhighlight>
 
=={{header|Clipper}}==
Also works with Harbour Project compiler Harbour 3.0.0 (Rev. 16951)
<syntaxhighlight lang="visualfoxpro"> Replicate( "Ha", 5 )</syntaxhighlight>
 
=={{header|Clojure}}==
<langsyntaxhighlight lang="lisp">(apply str (repeat 5 "ha"))</langsyntaxhighlight>
 
=={{header|COBOL}}==
Virtually a one-liner.
<syntaxhighlight lang="cobol">IDENTIFICATION DIVISION.
PROGRAM-ID. REPEAT-PROGRAM.
DATA DIVISION.
WORKING-STORAGE SECTION.
77 HAHA PIC A(10).
PROCEDURE DIVISION.
MOVE ALL 'ha' TO HAHA.
DISPLAY HAHA.
STOP RUN.</syntaxhighlight>
{{out}}
<pre>hahahahaha</pre>
 
=={{header|ColdFusion}}==
<syntaxhighlight lang="cfm">
<cfset word = 'ha'>
<Cfset n = 5>
<Cfoutput>
<Cfloop from="1" to="#n#" index="i">#word#</Cfloop>
</Cfoutput>
</syntaxhighlight>
 
=={{header|Common Lisp}}==
<langsyntaxhighlight lang="lisp">(defun repeat-string (n string)
(with-output-to-string (stream)
(loop repeat n do (write-string string stream))))</syntaxhighlight>
 
A version which allocates the result string in one step:
 
<syntaxhighlight lang="lisp">(defun repeat-string (n string
&aux
(len (length string))
(result (make-string (* n len)
:element-type (array-element-type string))))
(loop repeat n
for i from 0 by len
do (setf (subseq result i (+ i len)) string))
result)</syntaxhighlight>
 
 
For those who love one-liners, even at the expense of readability:
<syntaxhighlight lang="lisp">(defun repeat-string (n string)
(format nil "~V@{~a~:*~}" n string))</syntaxhighlight>
 
 
<syntaxhighlight lang="lisp">(princ (repeat-string 5 "hi"))</syntaxhighlight>
 
(princ (repeat-string 5 "hi"))</lang>
 
A single character may be repeated using just the builtin <code>make-string</code>:
<langsyntaxhighlight lang="lisp">(make-string 5 :initial-element #\X)</langsyntaxhighlight>
produces “XXXXX”.
 
=={{header|Crystal}}==
<syntaxhighlight lang="ruby">
puts "ha" * 5
</syntaxhighlight>
 
<pre>hahahahaha</pre>
 
=={{header|D}}==
Repeating a string:
<langsyntaxhighlight lang="d">import std.stdio, std.stringarray;
 
void main() {
writeflnwriteln("ha".repeatreplicate(5));
}</langsyntaxhighlight>
Repeating a character with vector operations:
<langsyntaxhighlight lang="d">import std.stdio;
 
void main() {
Line 276 ⟶ 911:
chars.length = 5; // set the length
chars[] = '*'; // set all characters in the string to '*'
writeflnwriteln(chars);
}</langsyntaxhighlight>
 
=={{header|DCL}}==
Not exactly what the task asks for but at least it is something;
<syntaxhighlight lang="dcl">$ write sys$output f$fao( "!AS!-!AS!-!AS!-!AS!-!AS", "ha" )
$ write sys$output f$fao( "!12*d" )</syntaxhighlight>
{{out}}
<pre>$ @repeat_a_string_and_then_character
hahahahaha
dddddddddddd</pre>
 
=={{header|Delphi}}==
Repeat a string
<syntaxhighlight lang="delphi">
<lang Delphi>
function RepeatString(const s: string; count: cardinal): string;
var
Line 292 ⟶ 935:
 
Writeln(RepeatString('ha',5));
</syntaxhighlight>
</lang>
 
Repeat a character
 
<syntaxhighlight lang="delphi">
<lang Delphi>
Writeln( StringOfChar('a',5) );
</syntaxhighlight>
</lang>
 
Using recursion
 
<syntaxhighlight lang="delphi">
function RepeatStr(const s: string; i: Cardinal): string;
begin
if i = 0 then
result := ''
else
result := s + RepeatStr(s, i-1)
end;
</syntaxhighlight>
 
Built in RTL function:
 
<syntaxhighlight lang Delphi="delphi">StrUtils.DupeString</langsyntaxhighlight>
 
=={{header|DWScript}}==
Repeat a string
 
<syntaxhighlight lang="delphi">
<lang Delphi>
PrintLn( StringOfString('abc',5) );
</syntaxhighlight>
</lang>
 
Repeat a character
 
<syntaxhighlight lang="delphi">
<lang Delphi>
PrintLn( StringOfChar('a',5) );
</syntaxhighlight>
</lang>
 
=={{header|Dyalect}}==
<syntaxhighlight lang="dyalect">String.Repeat("ha", 5)</syntaxhighlight>
 
=={{header|Déjà Vu}}==
<syntaxhighlight lang="dejavu">!. concat( rep 5 "ha" )</syntaxhighlight>
{{out}}
<pre>"hahahahaha"</pre>
 
=={{header|E}}==
<langsyntaxhighlight lang="e">"ha" * 5</langsyntaxhighlight>
 
=={{header|EasyLang}}==
<syntaxhighlight lang=easylang>
func$ rep s$ n .
for i to n
r$ &= s$
.
return r$
.
print rep "ha" 5
</syntaxhighlight>
 
=={{header|ECL}}==
After version 4.2.2
<syntaxhighlight lang="text">IMPORT STD; //Imports the Standard Library
STRING MyBaseString := 'abc';
RepeatedString := STD.Str.Repeat(MyBaseString,3);
RepeatedString; //returns 'abcabcabc'</syntaxhighlight>
 
Before version 4.2.2
<syntaxhighlight lang="text">RepeatString(STRING InStr, INTEGER Cnt) := FUNCTION
rec := {STRING Str};
ds := DATASET(Cnt,TRANSFORM(rec,SELF.Str := InStr));
res := ITERATE(ds,TRANSFORM(rec,SELF.Str := LEFT.Str + RIGHT.Str));
RETURN Res[Cnt].Str;
END;
 
RepeatString('ha',3);
RepeatString('Who',2);</syntaxhighlight>
 
=={{header|Ecstasy}}==
<syntaxhighlight lang="java">
String funny = "ha" * 5;
String stars = '*' * 80;
</syntaxhighlight>
 
=={{header|Egison}}==
<syntaxhighlight lang="egison">
(S.concat (take 5 (repeat1 "ha")))
</syntaxhighlight>
 
=={{header|Eiffel}}==
<syntaxhighlight lang="eiffel">
repeat_string(a_string: STRING; times: INTEGER): STRING
require
times_positive: times > 0
do
Result := a_string.multiply(times)
end
</syntaxhighlight>
 
=={{header|Elena}}==
ELENA 6.x :
<syntaxhighlight lang="elena">import system'routines;
import extensions;
import extensions'text;
public program()
{
var s := new Range(0, 5).selectBy::(x => "ha").summarize(new StringWriter())
}</syntaxhighlight>
 
=={{header|Elixir}}==
<syntaxhighlight lang="elixir">
String.duplicate("ha", 5)
</syntaxhighlight>
 
=={{header|Emacs Lisp}}==
Going via a list to repeat the desired string:
 
<syntaxhighlight lang="lisp">(apply 'concat (make-list 5 "ha"))</syntaxhighlight>
 
A single character can be repeated with <code>make-string</code>:
 
<syntaxhighlight lang="lisp">(make-string 5 ?x)</syntaxhighlight>
 
The <code>cl-loop</code> macro can repeat and concatenate:
 
{{libheader|cl-lib}}
<syntaxhighlight lang="lisp">(require 'cl-lib)
(cl-loop repeat 5 concat "ha")</syntaxhighlight>
 
=={{header|Erlang}}==
<langsyntaxhighlight lang="erlang">repeat(X,N) ->
lists:flatten(lists:duplicate(N,X)).</langsyntaxhighlight>
This will duplicate a string or character N times to produce a new string.
 
=={{header|ERRE}}==
<syntaxhighlight lang="erre">
PROCEDURE REPEAT_STRING(S$,N%->REP$)
LOCAL I%
REP$=""
FOR I%=1 TO N% DO
REP$=REP$+S$
END FOR
END PROCEDURE
</syntaxhighlight>
Note: If N% is less than 1, the result is the empty string "".If S$ is a one-character string
you can use the predefined function <code>STRING$</code> as <code>REP$=STRING$(S$,N%)</code>.
 
 
=={{header|Euphoria}}==
A simple loop will do:
<lang Euphoria>function repeat_string(object x, integer times)
<syntaxhighlight lang="euphoria">
sequence out
sequence s = ""
if atom(x) then
for i = 1 to 5 do s return&= repeat(x,times)"ha" end for
puts(1,s)
else
 
out = ""
hahahahaha
for n = 1 to times do
</syntaxhighlight>
out &= x
 
end for
For repeating a single character:
return out
<syntaxhighlight lang="euphoria">
end if
sequence s = repeat('*',5)
end function
 
*****
</syntaxhighlight>
 
For repeating a string or sequence of numbers:
<syntaxhighlight lang="euphoria">
include std/console.e -- for display
include std/sequence.e -- for repeat_pattern
sequence s = repeat_pattern("ha",5)
sequence n = repeat_pattern({1,2,3},5)
display(s)
display(n)
 
hahahahaha
{1,2,3,1,2,3,1,2,3,1,2,3,1,2,3}
</syntaxhighlight>
 
But wait, here's another way:
<syntaxhighlight lang="euphoria">
include std/console.e -- for display
include std/sequence.e -- for flatten
sequence s = flatten(repeat("ha",5))
display(s)
</syntaxhighlight>
 
note: repeat creates a sequence of ha's as shown below; flatten concatenates them.
<syntaxhighlight lang="euphoria">
{
"ha",
"ha",
"ha",
"ha",
"ha"
}
</syntaxhighlight>
 
=={{header|Explore}}==
puts(1,repeat_string("ha",5) & '\n') -- hahahahaha
The [[Scratch]] [[Repeat a string#Scratch|solution]], which requires making variables named "String", "Count", and "Repeated" first, works, unmodified:<br>https://i.ibb.co/yX3ybt7/Repeat-a-string-in-Explore-using-the-Scratch-solution.png
 
This example uses a special block located in the Strings category, and also outputs the results of the repeating of the string to a "say" block:<br>https://i.ibb.co/71x9rwn/Repeat-a-string-in-Explore-using-a-special-block.png
puts(1,repeat_string('*',5) & '\n') -- *****</lang>
 
=={{header|F_Sharp|F#}}==
<langsyntaxhighlight lang="fsharp">> String.replicate 5 "ha";;
val it : string = "hahahahaha"</langsyntaxhighlight>
Or
<langsyntaxhighlight lang="fsharp">> String.Concat( Array.create 5 "ha" );;
val it : string = "hahahahaha"</langsyntaxhighlight>
 
=={{header|Factor}}==
<langsyntaxhighlight lang="factor">: repeat-string ( str n -- str' ) swap <repetition> concat ;
 
"ha" 5 repeat-string print</langsyntaxhighlight>
 
=={{header|Forth}}==
<langsyntaxhighlight lang="forth">: place-n { src len dest n -- }
0 dest c!
n 0 ?do src len dest +place loop ;
 
s" ha" pad 5 place-n
pad count type \ hahahahaha</langsyntaxhighlight>
The same code without the use of locals:
<langsyntaxhighlight lang="forth">
: place-n ( src len dest n -- )
swap >r 0 r@ c!
Line 371 ⟶ 1,165:
 
s" ha" pad 5 place-n
pad count type \ hahahahaha</langsyntaxhighlight>
Filling a string with a single character is supported by ANS-Forth:
<langsyntaxhighlight lang="forth">pad 10 char * fill \ repeat a single character
pad 10 type \ **********</langsyntaxhighlight>
 
=={{header|Fortran}}==
{{works with |Fortran|90 and later}}
<langsyntaxhighlight lang="fortran">program test_repeat
 
write (*, '(a)') repeat ('ha', 5)
 
end program test_repeat</langsyntaxhighlight>
Output:
hahahahaha
 
=={{header|Free Pascal}}==
<syntaxhighlight lang="pascal">strUtils.dupeString('ha', 5)</syntaxhighlight>
Repetition of a single character:
<syntaxhighlight lang="pascal">stringOfChar('*', 5)</syntaxhighlight>
If the repeated character happens to be the space character:
<syntaxhighlight lang="pascal">space(5)</syntaxhighlight>
 
=={{header|FreeBASIC}}==
<syntaxhighlight lang="freebasic">' FB 1.05.0 Win64
 
' A character is essentially a string of length 1 in FB though there is a built-in function, String,
' which creates a string by repeating a character a given number of times.
 
' To avoid repeated concatenation (a slow operation) when the string to be repeated has a length
' greater than one, we instead create a buffer of the required size and then fill that.
 
Function repeat(s As String, n As Integer) As String
If n < 1 Then Return ""
If n = 1 Then Return s
Var size = Len(s)
If size = 0 Then Return s ' empty string
If size = 1 Then Return String(n, s[0]) ' repeated single character
Var buffer = Space(size * n) 'create buffer for size > 1
For i As Integer = 0 To n - 1
For j As Integer = 0 To size - 1
buffer[i * size + j] = s[j]
Next j
Next i
Return buffer
End Function
 
Print repeat("rosetta", 1)
Print repeat("ha", 5)
Print repeat("*", 5)
Print
Print "Press any key to quit program"
Sleep</syntaxhighlight>
 
{{out}}
<pre>
rosetta
hahahahaha
*****
</pre>
 
=={{header|Frink}}==
<langsyntaxhighlight lang="frink">
println[repeat["ha", 5]]
</syntaxhighlight>
</lang>
 
 
=={{header|FutureBasic}}==
<syntaxhighlight lang="futurebasic">
include "NSLog.incl"
 
CFStringRef repeatStr
repeatStr = @"Hello, World!\n"
NSLog( @"%@", fn StringByPaddingToLength( @"", 50 * len(repeatStr), repeatStr, 0 ) )
 
HandleEvents
</syntaxhighlight>
{{output}}
<pre>
[50 line repetitions of "Hello, World!"]
</pre>
 
 
 
=={{header|Gambas}}==
'''[https://gambas-playground.proko.eu/?gist=bdd2a7a0f4f09ff67e9d78b5d9667bdb Click this link to run this code]'''
<syntaxhighlight lang="text">Public Sub Main()
 
Print String$(5, "ha")
 
End</syntaxhighlight>
 
Output = hahahahaha
 
=={{header|GAP}}==
<syntaxhighlight lang ="gap">Concatenation(ListListWithIdenticalEntries([1 .. 10], n -> "BOB "));
# "BOB BOB BOB BOB BOB BOB BOB BOB BOB BOB "</langsyntaxhighlight>
 
=={{header|Glee}}==
<syntaxhighlight lang="glee">'*' %% 5</syntaxhighlight>
 
<syntaxhighlight lang="glee">'ha' => Str;
Str# => Len;
1..Len %% (Len * 5) => Idx;
Str [Idx] $;</syntaxhighlight>
 
<syntaxhighlight lang="glee">'ha'=>S[1..(S#)%%(S# *5)]</syntaxhighlight>
 
=={{header|Go}}==
<langsyntaxhighlight lang="go">fmt.Println(strings.Repeat("ha", 5)) # // ==> "hahahahaha"</langsyntaxhighlight>
There is no special way to repeat a single character, other than to convert the character to a string. The following works:
"Characters" are just strings of length one.
<syntaxhighlight lang="go">fmt.Println(strings.Repeat(string('h'), 5)) // prints hhhhh</syntaxhighlight>
 
=={{header|Groovy}}==
<syntaxhighlight lang ="groovy"> println 'ha' * 5</langsyntaxhighlight>
 
=={{header|Harbour}}==
<syntaxhighlight lang="visualfoxpro">? Replicate( "Ha", 5 )</syntaxhighlight>
 
=={{header|Haskell}}==
For a string of finite length:
<langsyntaxhighlight lang="haskell">concat $ replicate 5 "ha"</langsyntaxhighlight>
 
Or with list-monad (a bit obscure):
<langsyntaxhighlight lang="haskell">[1..5] >> "ha"</langsyntaxhighlight>
 
Or with Control.Applicative:
<syntaxhighlight lang="haskell">[1..5] *> "ha"</syntaxhighlight>
 
For an infinitely long string:
<langsyntaxhighlight lang="haskell">cycle "ha"</langsyntaxhighlight>
 
To repeat a single character:
<syntaxhighlight lang ="haskell">replicate 5 '*'</langsyntaxhighlight>
 
Or, unpacking the mechanism of '''replicate''' a little, and using a '''mappend'''-based rep in lieu of the '''cons'''-based '''repeat''', so that we can skip a subsequent '''concat''':
<syntaxhighlight lang="haskell">repString :: String -> Int -> String
repString s n =
let rep x = xs
where
xs = mappend x xs
in take (n * length s) (rep s)
 
main :: IO ()
main = print $ repString "ha" 5</syntaxhighlight>
{{Out}}
<pre>"hahahahaha"</pre>
 
As the number of repetitions grows, however, it may become more efficient to repeat by progressive duplication (mappend to self), mappending to an accumulator only where required for binary composition of the target length. (i.e. Rhind Papyrus 'Egyptian' or 'Ethiopian' multiplication):
 
<syntaxhighlight lang="haskell">import Data.Tuple (swap)
import Data.List (unfoldr)
import Control.Monad (join)
 
-- BY RHIND PAPYRUS 'EGYPTIAN' OR 'ETHIOPIAN' MULTIPLICATION ------------------
repString :: Int -> String -> String
repString n s =
foldr
(\(d, x) a ->
if d > 0 -- Is this power of 2 needed for the binary recomposition ?
then mappend a x
else a)
mempty $
zip
(unfoldr
(\h ->
if h > 0
then Just $ swap (quotRem h 2) -- Binary decomposition of n
else Nothing)
n)
(iterate (join mappend) s) -- Iterative duplication ( mappend to self )
 
-- TEST -----------------------------------------------------------------------
main :: IO ()
main = print $ repString 500 "ha"</syntaxhighlight>
 
=={{header|HicEst}}==
<langsyntaxhighlight HicEstlang="hicest">CHARACTER out*20
 
EDIT(Text=out, Insert="ha", DO=5)</langsyntaxhighlight>
 
=={{header|Icon}} and {{header|Unicon}}==
The procedure <tt>repl</tt> is a supplied function in Icon and Unicon.
<langsyntaxhighlight Iconlang="icon">procedure main(args)
write(repl(integer(!args) | 5))
end</langsyntaxhighlight>
If it weren't, one way to write it is:
<langsyntaxhighlight Iconlang="icon">procedure repl(s, n)
every (ns := "") ||:= |s\(0 <= n)
return ns
end</langsyntaxhighlight>
 
=={{header|Idris}}==
<syntaxhighlight lang="idris">strRepeat : Nat -> String -> String
strRepeat Z s = ""
strRepeat (S n) s = s ++ strRepeat n s
 
chrRepeat : Nat -> Char -> String
chrRepeat Z c = ""
chrRepeat (S n) c = strCons c $ chrRepeat n c</syntaxhighlight>
 
=={{header|Inform 7}}==
<langsyntaxhighlight lang="inform7">Home is a room.
 
To decide which indexed text is (T - indexed text) repeated (N - number) times:
Line 442 ⟶ 1,376:
When play begins:
say "ha" repeated 5 times;
end the story.</langsyntaxhighlight>
 
=={{Header|Insitux}}==
 
<syntaxhighlight lang="insitux">
(str* "ha" 5)
</syntaxhighlight>
 
{{out}}
 
<pre>
hahahahaha
</pre>
 
=={{header|IS-BASIC}}==
<syntaxhighlight lang="is-basic"> 10 PRINT STRING$("ha",5)
100 DEF STRING$(S$,N)
105 LET ST$=""
110 FOR I=1 TO N
120 LET ST$=ST$&S$
130 NEXT
140 LET STRING$=ST$
150 END DEF</syntaxhighlight>
 
=={{header|J}}==
<langsyntaxhighlight lang="j"> 5 # '*' NB. repeat each item 5 times
*****
5 # 'ha' NB. repeat each item 5 times
hhhhhaaaaa
(5 ((* # 'ha') $ ]) 'ha' NB. repeat array 5 times (explicit)
hahahahaha
5 ((* ;@#) $ ])< 'ha' NB. repeatusing boxing to treat the array 5as timesa (tacit)whole
hahahahaha</langsyntaxhighlight>
 
=={{header|Java}}==
There are a few ways to achieve this in Java.<br />
Starting with Java 11 you can use the ''String.repeat'' method.
<syntaxhighlight lang="java">
"ha".repeat(5);
</syntaxhighlight>
Which, if you view its implementation, is just using the ''Arrays.fill'' method.
<syntaxhighlight lang="java">
String[] strings = new String[5];
Arrays.fill(strings, "ha");
StringBuilder repeated = new StringBuilder();
for (String string : strings)
repeated.append(string);
</syntaxhighlight>
And if you look at the 'Arrays.fill' implementation, it's just a for-loop, which is likely the most idiomatic approach.
<syntaxhighlight lang="java">
String string = "ha";
StringBuilder repeated = new StringBuilder();
int count = 5;
while (count-- > 0)
repeated.append(string);
</syntaxhighlight>
<br />
Or
{{works with|Java|1.5+}}
 
There'sBefore Java 11 there was no functionmethod or operator to do this in Java, so you havehad to do it yourself.
 
<lang java5>public static String repeat(String str, int times){
<syntaxhighlight lang="java5">public static String repeat(String str, int times) {
StringBuilder ret = new StringBuilder();
StringBuilder sb = new StringBuilder(str.length() * times);
for(int i = 0;i < times;i++) ret.append(str);
for (int i = 0; i < times; i++)
return ret.toString();
sb.append(str);
return sb.toString();
}
 
public static void main(String[] args) {
System.out.println(repeat("ha", 5));
}</langsyntaxhighlight>
 
Or even shorter:
 
<lang java5>public static String repeat(String str, int times){
<syntaxhighlight lang="java5">public static String repeat(String str, int times) {
return new String(new char[times]).replace("\0", str);
}</langsyntaxhighlight>
 
In Apache Commons Lang, there is a [http://commons.apache.org/lang/api-2.6/org/apache/commons/lang/StringUtils.html#repeat%28java.lang.String,%20int%29 StringUtils.repeat()] method.
 
=={{header|JavaScript}}==
====Extending the String prototype====
This solution creates an array of n+1 null elements, then joins them using the target string as the delimiter
This solution creates an empty array of length n+1, then uses the array's join method to effectively concatenate the string n times. Note that extending the prototype of built-in objects is not a good idea if the code is to run in a shared workspace.
<lang javascript>String.prototype.repeat = function(n) {
<syntaxhighlight lang="javascript">String.prototype.repeat = function(n) {
return new Array(1 + n).join(this);
return new Array(1 + (n || 0)).join(this);
}
 
alertconsole.log("ha".repeat(5)); // hahahahaha</langsyntaxhighlight>
 
As of ES6, `repeat` is built in, so this can be written as:
 
<syntaxhighlight lang="javascript">
console.log("ha".repeat(5)); // hahahahaha</syntaxhighlight>
 
====Repetition by Egyptian multiplication====
For larger numbers of repetitions, however, it proves significantly faster to progressively double a copy of the original string (concatenating it with itself). Intermediate stages of doubling are appended to an accumulator wherever required for binary composition of the target number.
 
See the technique of 'Egyptian Multiplication' described in the Rhind Mathematical Papyrus at the British Museum.
 
<syntaxhighlight lang="javascript">(() => {
'use strict';
 
// replicate :: Int -> String -> String
const replicate = (n, s) => {
let v = [s],
o = [];
if (n < 1) return o;
while (n > 1) {
if (n & 1) o = o + v;
n >>= 1;
v = v + v;
}
return o.concat(v);
};
 
 
return replicate(5000, "ha")
})();</syntaxhighlight>
 
====Concat . replicate====
Or, more generically, we could derive '''repeat''' as the composition of '''concat''' and '''replicate'''
<syntaxhighlight lang="javascript">(() => {
'use strict';
 
// repeat :: Int -> String -> String
const repeat = (n, s) =>
concat(replicate(n, s));
 
// GENERIC FUNCTIONS ------------------------------------------------------
 
// concat :: [[a]] -> [a] | [String] -> String
const concat = xs =>
xs.length > 0 ? (() => {
const unit = typeof xs[0] === 'string' ? '' : [];
return unit.concat.apply(unit, xs);
})() : [];
 
// replicate :: Int -> a -> [a]
const replicate = (n, x) =>
Array.from({
length: n
}, () => x);
 
 
// TEST -------------------------------------------------------------------
return repeat(5, 'ha');
})();</syntaxhighlight>
{{Out}}
<pre>hahahahaha</pre>
 
=={{header|Joy}}==
<syntaxhighlight lang="joy">DEFINE repeat == "" rotate [concat] cons times.
 
"ha" 5 repeat.</syntaxhighlight>
 
=={{header|jq}}==
<syntaxhighlight lang="jq">"a " * 3 # => "a a a "</syntaxhighlight>
Note that if the integer multiplicand is 0, then the result is the JSON value '''null'''.
 
=={{header|Julia}}==
{{works with|Julia|1.0}}
 
<syntaxhighlight lang="julia">@show "ha" ^ 5
 
# The ^ operator is really just call to the `repeat` function
@show repeat("ha", 5)</syntaxhighlight>
 
=={{header|K}}==
 
<syntaxhighlight lang="k">
<lang k>
,/5#,"ha"
"hahahahaha"
Line 492 ⟶ 1,553:
5#"*"
"*****"
</syntaxhighlight>
</lang>
 
=={{header|Kotlin}}==
<syntaxhighlight lang="scala">fun main(args: Array<String>) {
println("ha".repeat(5))
}</syntaxhighlight>
Or more fancy:
<syntaxhighlight lang="scala">operator fun String.times(n: Int) = this.repeat(n)
 
fun main(args: Array<String>) = println("ha" * 5)</syntaxhighlight>
 
=={{header|LabVIEW}}==
I don't know if there is a built-in function for this, but it is easily achieved with a For loop and Concatenate Strings.
[[file:LabVIEW_Repeat_a_string.png]]
<br/>
By using built in functions:
 
[[File:Panel.png]]
[[File:BlockDiagram.png]]
<br/>
 
=={{header|Lambdatalk}}==
<syntaxhighlight lang="scheme">
{S.map {lambda {_} ha} {S.serie 1 10}}
-> ha ha ha ha ha ha ha ha ha ha
 
or
 
{S.replace \s
by
in {S.map {lambda {_} ha}
{S.serie 1 10}}}
-> hahahahahahahahahaha
 
or
{def repeat
{lambda {:w :n}
{if {< :n 0}
then
else :w{repeat :w {- :n 1}}}}}
-> repeat
 
{repeat ha 10}
-> hahahahahahahahahahaha
</syntaxhighlight>
 
=={{header|Lang}}==
<syntaxhighlight lang="lang">
# Repeat text function
fn.println(fn.repeatText(5, ha))
# Output: hahahahaha
 
# Mul operator
fn.println(parser.op(ha * 5))
# Output: hahahahaha
 
# Mul operator function
fn.println(fn.mul(ha, 5))
# Output: hahahahaha
</syntaxhighlight>
 
=={{header|langur}}==
<syntaxhighlight lang="langur">"ha" * 5</syntaxhighlight>
 
=={{header|Lasso}}==
<syntaxhighlight lang="lasso">'ha'*5 // hahahahaha</syntaxhighlight>
 
<syntaxhighlight lang="lasso">loop(5) => {^ 'ha' ^} // hahahahaha</syntaxhighlight>
 
=={{header|LFE}}==
<syntaxhighlight lang="lisp">
(string:copies '"ha" 5)
</syntaxhighlight>
 
=={{header|Liberty BASIC}}==
<langsyntaxhighlight lang="lb">a$ ="ha "
print StringRepeat$( a$, 5)
 
Line 506 ⟶ 1,640:
next i
StringRepeat$ =o$
end function</langsyntaxhighlight>
 
=={{header|Lingo}}==
*Take a string and repeat it some number of times.
<syntaxhighlight lang="lingo">on rep (str, n)
res = ""
repeat with i = 1 to n
put str after res
end repeat
return res
end</syntaxhighlight>
<syntaxhighlight lang="lingo">put rep("ha", 5)
-- "hahahahaha"</syntaxhighlight>
*If there is a simpler/more efficient way to repeat a single “character”...
<syntaxhighlight lang="lingo">put bytearray(5, chartonum("*")).readRawString(5)
-- "*****"</syntaxhighlight>
 
=={{header|LiveCode}}==
<syntaxhighlight lang="livecode">on mouseUp
put repeatString("ha", 5)
end mouseUp
 
function repeatString str n
repeat n times
put str after t
end repeat
return t
end repeatString</syntaxhighlight>
 
=={{header|Logo}}==
<langsyntaxhighlight lang="logo">to copies :n :thing [:acc "||]
if :n = 0 [output :acc]
output (copies :n-1 :thing combine :acc :thing)
end</langsyntaxhighlight>
or using cascade:
<langsyntaxhighlight lang="logo">show cascade 5 [combine "ha ?] "|| ; hahahahaha</langsyntaxhighlight>
 
Lhogho doesn't have cascade (yet), nor does it have the initialise a missing parameter capability demonstrated by the [:acc "||] above.
 
<langsyntaxhighlight lang="logo">to copies :n :thing :acc
if :n = 0 [output :acc]
output (copies :n-1 :thing combine :acc :thing)
end
 
print copies 5 "ha "||</langsyntaxhighlight>
 
=={{header|Lua}}==
<langsyntaxhighlight lang="lua">function repeats(s, n) return n > 0 and s .. repeatrepeats(s, n-1) or "" end</langsyntaxhighlight>
 
Or use native string library function
<syntaxhighlight lang ="lua">string.rep(s,n)</langsyntaxhighlight>
 
=={{header|MathematicaMaple}}==
There are many ways to do this in Maple. First, the "right" (most efficient) way is to use the supplied procedures for this purpose.
<lang Mathematica>Apply[StringJoin,ConstantArray["HA",{100}]]</lang>
<syntaxhighlight lang="maple">
> use StringTools in
> Repeat( "abc", 10 ); # repeat an arbitrary string
> Fill( "x", 20 ) # repeat a character
> end use;
"abcabcabcabcabcabcabcabcabcabc"
 
"xxxxxxxxxxxxxxxxxxxx"
</syntaxhighlight>
These next two are essentially the same, but are less efficient (though still linear) because they create a sequence of 10 strings before concatenating them (with the built-in procedure cat) to form the result.
<syntaxhighlight lang="maple">
> cat( "abc" $ 10 );
"abcabcabcabcabcabcabcabcabcabc"
 
> cat( seq( "abc", i = 1 .. 10 ) );
=={{header|MATLAB}}==
"abcabcabcabcabcabcabcabcabcabc"
<lang MATLAB>function S = repeat(s , n)
</syntaxhighlight>
You ''can'' build up a string in a loop, but this is highly inefficient (quadratic); don't do this.
<syntaxhighlight lang="maple">
> s := "":
> to 10 do s := cat( s, "abc" ) end: s;
"abcabcabcabcabcabcabcabcabcabc"
</syntaxhighlight>
If you need to build up a string incrementally, use a StringBuffer object, which keeps things linear.
 
Finally, note that strings and characters are not distinct datatypes in Maple; a character is just a string of length one.
 
=={{header|Mathematica}}/{{header|Wolfram Language}}==
<syntaxhighlight lang="mathematica">StringRepeat["ha", 5]</syntaxhighlight>
 
=={{header|MATLAB}} / {{header|Octave}}==
<syntaxhighlight lang="matlab">function S = repeat(s , n)
S = repmat(s , [1,n]) ;
return</langsyntaxhighlight>
 
Note 1: The repetition is returned, not displayed.
<br>
Note 2: To repeat a string, use single quotes. Example: S=repeat('ha',5)
 
=={{header|Maxima}}==
<syntaxhighlight lang="maxima">"$*"(s, n) := apply(sconcat, makelist(s, n))$
infix("$*")$
 
"abc" $* 5;
/* "abcabcabcabcabc" */</syntaxhighlight>
 
=={{header|Mercury}}==
Mercury's 'string' module provides an efficient char-repeater. The following uses string.builder to repeat strings.
 
<langsyntaxhighlight Mercurylang="mercury">:- module repeat.
:- interface.
:- import_module string, char, int.
Line 572 ⟶ 1,768:
print(Stream, String, !S),
printn(Stream, N - 1, String, !S)
; true ).</langsyntaxhighlight>
 
=={{header|min}}==
{{works with|min|0.19.3}}
<syntaxhighlight lang="min">"ha" 5 repeat print</syntaxhighlight>
{{out}}
<pre>
hahahahaha
</pre>
 
=={{header|MiniScript}}==
<syntaxhighlight lang="miniscript">str = "Lol"
print str * 5</syntaxhighlight>
{{out}}
<pre>
LolLolLolLolLol
</pre>
 
=={{header|Mirah}}==
<langsyntaxhighlight lang="mirah">x = StringBuilder.new
 
5.times do
Line 581 ⟶ 1,793:
end
 
puts x # ==> "hahahahaha"</langsyntaxhighlight>
 
=={{header|Monte}}==
<syntaxhighlight lang="monte">
var s := "ha " * 5
traceln(s)
</syntaxhighlight>
 
=={{header|MontiLang}}==
<syntaxhighlight lang="montilang">|ha| 5 * PRINT .</syntaxhighlight>
Or with a loop
<syntaxhighlight lang="montilang">FOR 5
|ha| OUT .
ENDFOR || PRINT .</syntaxhighlight>
 
Or ...
 
<syntaxhighlight lang="montilang">|ha| FOR 5 OUT ENDFOR . || PRINT .</syntaxhighlight>
 
=={{header|MUMPS}}==
<langsyntaxhighlight MUMPSlang="mumps">RPTSTR(S,N)
;Repeat a string S for N times
NEW I
Line 592 ⟶ 1,821:
RPTSTR1(S,N) ;Functionally equivalent, but denser to read
F I=1:1:N W S
Q</lang>
</syntaxhighlight>
 
 
=={{header|NewLISP}}==
This last example uses the [http://docs.intersystems.com/cache20121/csp/docbook/DocBook.UI.Page.cls?KEY=RCOS_fpiece#RCOS_B57001 $PIECE] function.
<lang NewLISP>(dup "ha" 5)</lang>
<syntaxhighlight lang="mumps">
;Even better (more terse)
S x="",$P(x,"-",10)="-"
W x
</syntaxhighlight>
 
=={{header|Nanoquery}}==
In Nanoquery, multiplying strings by an integer returns a new string with the original value repeated.
<syntaxhighlight lang="nanoquery">"ha" * 5</syntaxhighlight>
 
=={{header|Neko}}==
<syntaxhighlight lang="actionscript">/* Repeat a string, in Neko */
var srep = function(s, n) {
var str = ""
while n > 0 {
str += s
n -= 1
}
return str
}
 
$print(srep("ha", 5), "\n")</syntaxhighlight>
 
{{out}}
<pre>prompt$ nekoc srep.neko
prompt$ neko srep
hahahahaha</pre>
 
=={{header|Nemerle}}==
Any of the methods shown in the [[Repeat_a_string#C.23|C#]] solution would also work for Nemerle, but they're all semantically awkward. This example uses an extension method to wrap one of the awkward techniques in order to clarify the semantics (which is also possible in C#, there's nothing really Nemerle specific here except the syntax).
<syntaxhighlight lang="nemerle">using System;
using System.Console;
 
module StrRep
{
Repeat(this s : string, n : int) : string
{
String('x', n).Replace("x", s)
}
Main() : void
{
WriteLine("ha".Repeat(5));
WriteLine("*".Repeat(5));
WriteLine(String('*', 5)); // repeating single char
 
}
}</syntaxhighlight>
 
=={{header|NetRexx}}==
NetRexx has built in functions to manipulate strings. The most appropriate for this task is the <code>'''copies()'''</code> function:
<langsyntaxhighlight NetRexxlang="netrexx">/* NetRexx */
 
ha5 = 'ha'.copies(5)
</syntaxhighlight>
</lang>
 
There are several other built-in functions that can be used to achieve the same result depending on need:
 
<syntaxhighlight lang="netrexx">/* NetRexx */
sampleStr = 'ha' -- string to duplicate
say ' COPIES:' sampleStr.copies(5)
say 'CHANGESTR:' '.....'.changestr('.', sampleStr)
 
sampleChr = '*' -- character to duplicate
say ' LEFT:' sampleChr.left(5, sampleChr)
say ' RIGHT:' sampleChr.right(5, sampleChr)
say ' CENTRE:' sampleChr.centre(5, sampleChr)
say ' OVERLAY:' sampleChr.overlay(sampleChr, 1, 5, sampleChr)
say ' SUBSTR:' ''.substr(1, 5, sampleChr)
say 'TRANSLATE:' '.....'.translate(sampleChr, '.')
</syntaxhighlight>
 
=={{header|NewLISP}}==
<syntaxhighlight lang="newlisp">(dup "ha" 5)</syntaxhighlight>
 
=={{header|Nim}}==
<syntaxhighlight lang="nim">import strutils
 
# Repeat a char.
echo repeat('a', 5) # -> "aaaaa".
 
# Repeat a string.
echo repeat("ha", 5) # -> "hahahahaha".</syntaxhighlight>
 
=={{header|Objeck}}==
<langsyntaxhighlight lang="objeck">bundle Default {
class Repeat {
function : Main(args : String[]) ~ Nil {
Line 619 ⟶ 1,926:
}
}
}</langsyntaxhighlight>
 
=={{header|Objective-C}}==
Line 628 ⟶ 1,935:
We will extend NSString, the de facto Objective-C string class in environments that are either compatible with or descend directly from the OPENSTEP specification, such as GNUstep and Mac OS X, respectively, with a method that accomplishes the described task.
 
<langsyntaxhighlight lang="objc">@interface NSString (RosettaCodeAddition)
- (NSString *) repeatStringByNumberOfTimes: (NSUInteger) times;
@end
Line 636 ⟶ 1,943:
return [@"" stringByPaddingToLength:[self length]*times withString:self startingAtIndex:0];
}
@end</langsyntaxhighlight>
 
Now, let's put it to use:
<langsyntaxhighlight lang="objc"> // Instantiate an NSString by sending an NSString literal our new
// -repeatByNumberOfTimes: selector.
NSString *aString = [@"ha" repeatStringByNumberOfTimes:5];
 
// Display the NSString.
NSLog(@"%@", aString);</langsyntaxhighlight>
 
=={{header|OCaml}}==
Since Ocaml 4.02 strings are immutable, as is convenient for a functional language. Mutable strings are now implemented in the module Bytes.
<lang ocaml>let string_repeat s n =
<syntaxhighlight lang="ocaml">let string_repeat s n =
let len = String.length s in
let ress = StringBytes.create(nof_string * len)s in
let len = Bytes.length s in
let res = Bytes.create (n * len) in
for i = 0 to pred n do
StringBytes.blit s 0 res (i * len) len;
done;
(Bytes.to_string res)
;;</langsyntaxhighlight>
which gives the signature<syntaxhighlight lang="ocaml">val string_repeat : string -> int -> string = <fun></syntaxhighlight>
 
testing in the toplevel:
<langsyntaxhighlight lang="ocaml"># string_repeat "Hiuoa" 3 ;;
- : string = "HiuoaHiuoaHiuoa"</langsyntaxhighlight>
 
Alternately create an array initialized to s, and concat:
<langsyntaxhighlight lang="ocaml">let string_repeat s n =
String.concat "" (Array.to_list (Array.make n s))
;;</langsyntaxhighlight>
 
Or:
<langsyntaxhighlight lang="ocaml">let string_repeat s n =
Array.fold_left (^) "" (Array.make n s)
;;</langsyntaxhighlight>
 
To repeat a single character use:
<syntaxhighlight lang ="ocaml">String.make 5 '*'</langsyntaxhighlight>
 
=={{header|Oforth}}==
<syntaxhighlight lang="oforth">StringBuffer new "abcd" <<n(5)</syntaxhighlight>
 
=={{header|OpenEdge/Progress}}==
<langsyntaxhighlight Progresslang="progress (OpenEdgeopenedge ABLabl)">MESSAGE FILL( "ha", 5 ) VIEW-AS ALERT-BOX.</langsyntaxhighlight>
 
=={{header|OxygenBasic}}==
<syntaxhighlight lang="oxygenbasic">
 
'REPEATING A CHARACTER
 
print string 10,"A" 'result AAAAAAAAAA
 
'REPEATING A STRING
 
function RepeatString(string s,sys n) as string
sys i, le=len s
if le=0 then exit function
n*=le
function=nuls n
'
for i=1 to n step le
mid function,i,s
next
end function
 
print RepeatString "ABC",3 'result ABCABCABC
</syntaxhighlight>
 
=={{header|Oz}}==
We have to write a function for this:
<langsyntaxhighlight lang="oz">declare
fun {Repeat Xs N}
if N > 0 then
Line 687 ⟶ 2,023:
end
in
{System.showInfo {Repeat "Ha" 5}}</langsyntaxhighlight>
 
=={{header|PARI/GP}}==
===Version #1. Based on recursion.===
This solution is unimaginably bad. Slightly less bad versions can be designed, but that's not the point: don't use GP for text processing if you can avoid it. If you really need to, it's easy to create an efficient function in PARI (see [[#C|C]]) and pass that to GP.
This solution is recursive and unimaginably bad. Slightly less bad versions can be designed, but that's not the point: don't use GP for text processing if you can avoid it. If you really need to, it's easy to create an efficient function in PARI (see [[#C|C]]) and pass that to GP.
<lang parigp>repeat(s,n)={
<syntaxhighlight lang="parigp">repeat(s,n)={
if(n, Str(repeat(s, n-1), s), "")
};</langsyntaxhighlight>
 
<code>concat()</code> joins together a vector of strings, in this case a single string repeated.
<syntaxhighlight lang="parigp">repeat(s,n)=concat(vector(n,i, s));</syntaxhighlight>
 
This solution is recursive and slightly less bad than the others for large n.
<syntaxhighlight lang="parigp">repeat(s,n)={
if(n<4, return(concat(vector(n,i, s))));
if(n%2,
Str(repeat(Str(s,s),n\2),s)
,
repeat(Str(s,s),n\2)
);
}</syntaxhighlight>
 
===Version #2. Simple loop based.===
{{Works with|PARI/GP|2.7.4 and above}}
 
Basic set of string functions is very handy for presentation purposes. At the same time, it is true that PARI/GP is not an appropriate tool
for the heavy text processing.
 
<syntaxhighlight lang="parigp">
\\ Repeat a string str the specified number of times ntimes and return composed string.
\\ 3/3/2016 aev
srepeat(str,ntimes)={
my(srez=str,nt=ntimes-1);
if(ntimes<1||#str==0,return(""));
if(ntimes==1,return(str));
for(i=1,nt, srez=concat(srez,str));
return(srez);
}
 
{
\\ TESTS
print(" *** Testing srepeat:");
print("1.",srepeat("a",5));
print("2.",srepeat("ab",5));
print("3.",srepeat("c",1));
print("4.|",srepeat("d",0),"|");
print("5.|",srepeat("",5),"|");
print1("6."); for(i=1,10000000, srepeat("e",10));
}
</syntaxhighlight>
 
{{Output}}
<pre>
*** Testing srepeat:
1.aaaaa
2.ababababab
3.c
4.||
5.||
6.
(16:00) gp > ##
*** last result computed in 1min, 2,939 ms.
</pre>
 
=={{header|Pascal}}==
See [[#Delphi|Delphi]] or [[#Free Pascal|Free Pascal]], as standard Pascal does not know strings of unlimited length.
See [[Repeat_a_string#Delphi | Delphi]]
 
=={{header|Perl}}==
<langsyntaxhighlight lang="perl">"ha" x 5</langsyntaxhighlight>
 
=={{header|Perl 6Phix}}==
<!--<syntaxhighlight lang="phix">(phixonline)-->
{{works with|Rakudo|#21 "Seattle"}}
<span style="color: #0000FF;">?</span><span style="color: #7060A8;">repeat</span><span style="color: #0000FF;">(</span><span style="color: #008000;">'*'</span><span style="color: #0000FF;">,</span><span style="color: #000000;">5</span><span style="color: #0000FF;">)</span>
<lang perl6>"ha" x 5</lang>
<span style="color: #0000FF;">?</span><span style="color: #7060A8;">join</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">repeat</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"ha"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">5</span><span style="color: #0000FF;">),</span><span style="color: #008000;">""</span><span style="color: #0000FF;">)</span>
(Note that the <code>x</code> operator isn't quite the same as in Perl 5: it now only creates strings. To create lists, use <code>xx</code>.)
<!--</syntaxhighlight>-->
{{out}}
<pre>
"*****"
"hahahahaha"
</pre>
 
=={{header|Phixmonti}}==
<syntaxhighlight lang="phixmonti">def rep /# s n -- s #/
"" swap
for drop
over chain
endfor
nip
enddef
 
"ha" 5 rep print</syntaxhighlight>
Same result (simple character):
<syntaxhighlight lang="phixmonti">65 5 rep
65 5 repeat
'A' 5 repeat</syntaxhighlight>
 
=={{header|PHP}}==
<langsyntaxhighlight lang="php">str_repeat("ha", 5)</langsyntaxhighlight>
 
=={{header|PicoLisp}}==
<langsyntaxhighlight PicoLisplang="picolisp">(pack (need 5 "ha"))
-> "hahahahaha"</langsyntaxhighlight>
or:
<langsyntaxhighlight PicoLisplang="picolisp">(pack (make (do 5 (link "ha"))))
-> "hahahahaha"</langsyntaxhighlight>
 
=={{header|Pike}}==
<langsyntaxhighlight lang="pike">"ha"*5;</langsyntaxhighlight>
 
=={{header|PL/I}}==
<syntaxhighlight lang="pl/i">
<lang PL/I>s = copy('ha', 5);
/* To repeat a string a variable number of times: */
 
s = repeat('ha', 4);
 
/* or */
 
s = copy('ha', 5);
 
/* To repeat a single character a fixed number of times: */
 
s = (5)'h'; /* asigns 'hhhhh' to s. */
</syntaxhighlight>
</lang>
 
=={{header|Plain English}}==
<syntaxhighlight lang="plainenglish">To run:
Start up.
Put "ha" into a string.
Append the string to itself given 5.
Write the string on the console.
Fill another string with the asterisk byte given 5.
Write the other string on the console.
Wait for the escape key.
Shut down.
 
To append a string to itself given a number:
If the number is less than 1, exit.
Privatize the string.
Privatize the number.
Subtract 1 from the number.
Append the string to the original string given the number.</syntaxhighlight>
{{out}}
<pre>
hahahahaha
*****
</pre>
 
=={{header|Plorth}}==
<syntaxhighlight lang="plorth">"ha" 5 *</syntaxhighlight>
 
=={{header|PostScript}}==
<langsyntaxhighlight PostScriptlang="postscript">% the comments show the stack content after the line was executed
% where rcount is the repeat count, "o" is for orignal,
% "f" is for final, and iter is the for loop variable
Line 746 ⟶ 2,192:
} for
pop % fstring
} def</langsyntaxhighlight>
 
=={{header|PowerBASIC}}==
<langsyntaxhighlight lang="powerbasic">MSGBOX REPEAT$(5, "ha")</langsyntaxhighlight>
 
=={{header|PowerShell}}==
<langsyntaxhighlight lang="powershell">"ha" * 5 # ==> "hahahahaha"</langsyntaxhighlight>
 
=={{header|Processing}}==
<syntaxhighlight lang="processing">void setup() {
String rep = repeat("ha", 5);
println(rep);
}
String repeat(String str, int times) {
// make an array of n chars,
// replace each char with str,
// and return as a new String
return new String(new char[times]).replace("\0", str);
}</syntaxhighlight>
 
==={{header|Processing Python mode}}===
<syntaxhighlight lang="python">def setup():
rep = repeat("ha", 5)
println(rep)
 
def repeat(s, times):
return s * times</syntaxhighlight>
 
=={{header|Prolog}}==
<langsyntaxhighlight lang="prolog">%repeat(Str,Num,Res).
repeat(Str,1,Str).
repeat(Str,Num,Res):-
Num1 is Num-1,
repeat(Str,Num1,Res1),
string_concat(Str, Res1, Res).</langsyntaxhighlight>
 
=== alternative using DCG strings ===
 
This tail-recursive DCG implemention
is more efficient than anything using lists:append .
 
{{works with|SWI-Prolog|7}}
 
<syntaxhighlight lang="prolog">
:- system:set_prolog_flag(double_quotes,chars) .
 
repeat(SOURCEz0,COUNT0,TARGETz)
:-
prolog:phrase(repeat(SOURCEz0,COUNT0),TARGETz)
.
 
%! repeat(SOURCEz0,COUNT0)//2
 
repeat(_SOURCEz0_,0)
-->
! ,
[]
.
 
repeat(SOURCEz0,COUNT0)
-->
SOURCEz0 ,
{ COUNT is COUNT0 - 1 } ,
repeat(SOURCEz0,COUNT)
.
 
</syntaxhighlight>
 
{{out}}
<pre>
/*
?- repeat("ha",5,TARGETz) .
TARGETz = [h, a, h, a, h, a, h, a, h, a].
 
?-
*/
</pre>
 
<pre>
:- begin_tests(basic) .
 
:- system:set_prolog_flag(double_quotes,chars) .
 
test('1',[])
:-
repeat("a",2,"aa")
.
 
test('2',[])
:-
repeat("ha",2,"haha")
.
 
test('3',[])
:-
repeat("ha",3,"hahaha")
.
 
test('4',[])
:-
repeat("",3,"")
.
 
test('5',[])
:-
repeat("ha",0,"")
.
 
test('6',[])
:-
repeat("ha",1,"ha")
.
 
:- end_tests(basic) .
</pre>
 
=={{header|Pure}}==
Line 766 ⟶ 2,312:
repeating it more than 0 times results in the concatenation of the string and (n-1) further repeats.
 
<langsyntaxhighlight lang="pure">> str_repeat 0 s = "";
> str_repeat n s = s + (str_repeat (n-1) s) if n>0;
> str_repeat 5 "ha";
"hahahahaha"
></langsyntaxhighlight>
 
You can define str_repeat using infinite lazy list (stream).
 
<syntaxhighlight lang="pure">
str_repeat n::int s::string = string $ take n $ cycle (s:[]);
</syntaxhighlight>
 
=={{header|PureBasic}}==
<langsyntaxhighlight PureBasiclang="purebasic">Procedure.s RepeatString(count, text$=" ")
Protected i, ret$=""
 
Line 782 ⟶ 2,334:
EndProcedure
 
Debug RepeatString(5, "ha")</langsyntaxhighlight>
 
=={{header|Python}}==
<langsyntaxhighlight lang="python">"ha" * 5 # ==> "hahahahaha"</langsyntaxhighlight>
"Characters" are just strings of length one.
 
the other way also works:
<langsyntaxhighlight lang="python">5 * "ha" # ==> "hahahahaha"</langsyntaxhighlight>
 
=== Using a Function ===
<syntaxhighlight lang="python">def repeat(s, times):
return s * times
 
print(repeat("ha", 5))</syntaxhighlight>
{{Out}}
<pre>hahahahaha</pre>
 
=== Using Lambda ===
<syntaxhighlight lang="python">x = lambda a: a * 5
print(x("ha"))</syntaxhighlight>
{{Out}}
<pre>hahahahaha</pre>
 
=={{header|Quackery}}==
<syntaxhighlight lang="quackery">$ "ha" 5 of echo$</syntaxhighlight>
'''Output:'''
<pre>hahahahaha</pre>
 
=={{header|R}}==
<syntaxhighlight lang ="ruby">paste(repstrrep("ha", 5), collapse='')</langsyntaxhighlight>
 
=={{header|Racket}}==
<syntaxhighlight lang="racket">
For small n:
<#lang scheme>; fastracket
;; fast
(define (string-repeat n str)
(apply string-append* (make-list n str)))
(string-repeat 5 "ha") =; => "hahahahaha"</lang>
</syntaxhighlight>
 
For very large n:
<lang scheme>; memory efficient
(define (string-repeat n string)
(with-output-to-string
(λ ()
(for ([_ (in-range n)])
(display string)))))
(string-repeat 5 "ha") ==> "hahahahaha"</lang>
 
To repeat a single character:
<syntaxhighlight lang="racket">
<lang scheme>(make-string 5 #\*) => "*****"</lang>
(make-string 5 #\*) => "*****"
</syntaxhighlight>
 
=={{header|Raku}}==
(formerly Perl 6)
<syntaxhighlight lang="raku" line>print "ha" x 5</syntaxhighlight>
(Note that the <code>x</code> operator isn't quite the same as in Perl 5: it now only creates strings. To create lists, use <code>xx</code>.)
 
=={{header|RapidQ}}==
<syntaxhighlight lang="vb">
'For a single char
showmessage String$(10, "-")
 
'For strings with more than one char
function Repeat$(Expr as string, Count as integer) as string
dim x as integer
for x = 1 to Count
Result = Result + Expr
next
end function
 
showmessage Repeat$("ha", 5)
</syntaxhighlight>
 
=={{header|REALbasic}}==
<syntaxhighlight lang="vb">Function Repeat(s As String, count As Integer) As String
Dim output As String
For i As Integer = 0 To count
output = output + s
Next
Return output
End Function
</syntaxhighlight>
 
=={{header|REBOL}}==
<langsyntaxhighlight lang="rebol">head insert/dup "" "ha" 5</langsyntaxhighlight>
 
=={{header|Red}}==
<syntaxhighlight lang="red">>> str: "Add duplicates to string"
>> insert/dup str "ha" 3
== "hahahaAdd duplicates to string"
>> insert/dup tail str "ha" 3
== "hahahaAdd duplicates to stringhahaha"</syntaxhighlight>
 
=={{header|ReScript}}==
<syntaxhighlight lang="rescript">Js.log(Js.String2.repeat("ha", 5))</syntaxhighlight>
 
=={{header|Retro}}==
<langsyntaxhighlight Retrolang="retro">with strings'
: repeatString ( $n-$ )
1- [ dup ] dip [ over prepend ] times nip ;
 
"ha" 5 repeatString</langsyntaxhighlight>
 
=={{header|REXX}}==
Since the REXX language only supports the "character" type, it's not surprising that there are so many ways to skin a cat.
<lang REXX>
<syntaxhighlight lang="rexx">/*REXX program to show various ways to repeat a string (or repeat a single char).*/
/*all examples are equivalent, but not created equal.*/
 
/*all examples are equivalent, but not created equal.*/
 
/*───────────────────────────────────────────*/
/*---------------------*/
 
y='ha'
z=copies(y,5)
/*───────────────────────────────────────────*/
 
z=copies( 'ha', 5 )
/*---------------------*/
/*───────────────────────────────────────────*/
 
y='ha'
z = copies( 'ha', 5 )
 
/*---------------------*/
 
y='ha'
z=y||y||y||y||y
/*───────────────────────────────────────────*/
 
y='ha'
/*---------------------*/
z=y || y || y || y || y /*same as previous, but the "big sky" version*/
 
/*───────────────────────────────────────────*/
y= 'ha'
z= y || y || y || y || y
 
/*---------------------*/
 
y='ha'
z=''
do 5
z=z||y
end
/*───────────────────────────────────────────*/
y="ha"
z=
do 5
z=z||y
end
/*───────────────────────────────────────────*/
y="ha"
z=
do i=101 to 105
z=z||y
end
 
/*───────────────────────────────────────────*/
do 5
y='+'
z=z || y
z=left('',5,y)
end
/*───────────────────────────────────────────*/
y='+'
z=right('',5,y)
/*───────────────────────────────────────────*/
y='+'
z=substr('',1,5,y)
/*───────────────────────────────────────────*/
y='+'
z=center('',5,y)
/*───────────────────────────────────────────*/
y='+'
z=centre('',5,y)
/*───────────────────────────────────────────*/
y='+'
z=space('',5,y)
/*───────────────────────────────────────────*/
y='+'
z=translate('@@@@@',y,"@")
/*───────────────────────────────────────────*/
y='abcdef'
z=five(y)
exit
 
five: procedure expose y; parse arg g
/*---------------------*/
if length(g)>=5*length(y) then return g
return five(y||g)
/*───────────────────────────────────────────*/
y='something wicked this way comes.'
z=y||y||y||y||y||y||y||y||y||y||y||y|\y||y||y
z=left(z,5*length(y))
/*───────────────────────────────────────────*/
y='+'
z=copies('',5,y)
/*───────────────────────────────────────────*/
y='+'
z=lower('',1,5,y)
/*───────────────────────────────────────────*/
y='+'
z=lower('',,5,y)
/*───────────────────────────────────────────*/
z='+'
z=upper('',1,5,y)
/*───────────────────────────────────────────*/
z=upper('',,5,y)
/*───────────────────────────────────────────*/
 
y='charter bus.'
y="ha"
z='*****'
z=changestr('*',z,y)
/*───────────────────────────────────────────*/
y='what the hey!'
z=
do until length(z)==5*length(y)
 
do 5
z=z||y
end
/*───────────────────────────────────────────*/
y='what the hey!'
z=
do until length(z)==5*length(y)
z=insert(z,0,y)
end
/*───────────────────────────────────────────*/
y='yippie ki yay'
z=
do i=1 by 5 for 5
z=overlay(y,z,i)
end
/*───────────────────────────────────────────*/
y='+'
z=justify('',5,y)
/*───────────────────────────────────────────*/
whatever_this_variable_is_____it_aint_referenced_directly= 'boy oh boy.'
z=; signal me; me:
do 5
z=z||strip(subword(sourceline(sigl-1),2),,"'")
end
/*───────────────────────────────────────────*/
y="any more examples & the angry townfolk with pitchforks will burn the castle."
parse value y||y||y||y||y with z
 
exit /*stick a fork in it, we're done.*/</syntaxhighlight>
/*---------------------*/
Some older REXXes don't have a '''changestr''' bif, so one is included here ──► [[CHANGESTR.REX]].
</lang>
<br><br>
 
=={{header|Ring}}==
<syntaxhighlight lang="ring"> Copy("ha" , 5) # ==> "hahahahaha"</syntaxhighlight>
 
=={{header|RPL}}==
≪ "" 1 5 START "ha" + NEXT ≫ EVAL
{{out}}
<pre>1: "hahahahaha"</pre>
=={{header|Ruby}}==
<langsyntaxhighlight lang="ruby">"ha" * 5 # ==> "hahahahaha"</langsyntaxhighlight>
 
Despite the use of the * operator, the operation is not commutative:
=={{header|Run BASIC}}==
<lang ruby>5 * "ha" # TypeError: String can't be coerced into Fixnum</lang>
<syntaxhighlight lang="runbasic">a$ = "ha "
for i = 1 to 5
a1$ = a1$ + a$
next i
a$ = a1$
print a$</syntaxhighlight>
 
=={{header|Rust}}==
<syntaxhighlight lang="rust">std::iter::repeat("ha").take(5).collect::<String>(); // ==> "hahahahaha"</syntaxhighlight>
 
Since 1.16:
<syntaxhighlight lang="rust">"ha".repeat(5); // ==> "hahahahaha"</syntaxhighlight>
 
=={{header|Scala}}==
<langsyntaxhighlight lang="scala">"ha" * 5 // ==> "hahahahaha"</langsyntaxhighlight>
 
=={{header|Scheme}}==
<langsyntaxhighlight lang="scheme">(define (string-repeat n str)
(apply string-append (vector->list (make-vector n str))))</langsyntaxhighlight>
with SRFI 1:
<langsyntaxhighlight lang="scheme">(define (string-repeat n str)
(fold string-append "" (make-list n str)))
(string-repeat 5 "ha") ==> "hahahahaha"</langsyntaxhighlight>
 
To repeat a single character:
<langsyntaxhighlight lang="scheme">(make-string 5 #\*)</langsyntaxhighlight>
 
=={{header|Scratch}}==
 
This example requires making variables named "String", "Count", and "Repeated" first.
 
[[File:Scratch_Repeat_a_String.png]]
 
=={{header|sed}}==
Number of ampersands indicates number of repetitions.
<syntaxhighlight lang="sed">
$ echo ha | sed 's/.*/&&&&&/'
hahahahaha
</syntaxhighlight>
 
=={{header|Seed7}}==
<langsyntaxhighlight lang="seed7">$ include "seed7_05.s7i";
 
const proc: main is func
begin
writeln("ha" mult 5);
end func;</langsyntaxhighlight>
 
Output:
Line 906 ⟶ 2,615:
hahahahaha
</pre>
 
=={{header|SenseTalk}}==
<syntaxhighlight lang="sensetalk">
put "Ho!" repeated 3 times
 
put "Merry" repeated to length 12
</syntaxhighlight>
Output:
<pre>
Ho!Ho!Ho!
MerryMerryMe
</pre>
 
=={{header|Sidef}}==
<syntaxhighlight lang="ruby">'ha' * 5; # ==> 'hahahahaha'</syntaxhighlight>
 
=={{header|Sinclair ZX81 BASIC}}==
Works with 1k of RAM. This program defines a subroutine that expects to find a string and a number of times to repeat it; but all it then does is loop and concatenate, so making it a separate subroutine is arguably overkill.
<syntaxhighlight lang="basic"> 10 LET S$="HA"
20 LET N=5
30 GOSUB 60
40 PRINT T$
50 STOP
60 LET T$=""
70 FOR I=1 TO N
80 LET T$=T$+S$
90 NEXT I
100 RETURN</syntaxhighlight>
 
=={{header|Smalltalk}}==
 
If n is a small constant, then simply concatenating n times will do; for example, n=5::
<syntaxhighlight lang="smalltalk">v := 'ha'.
v,v,v,v,v</syntaxhighlight>
 
{{works with|Pharo|1.4}}
{{works with|Smalltalk/X}}
 
By creating a collection of n 'ha', and joining them to a string:
 
<syntaxhighlight lang="smalltalk">((1 to: n) collect: [:x | 'ha']) joinUsing: ''.</syntaxhighlight>
or:{{works with|Smalltalk/X}}
{{works with|VisualWorks Smalltalk}}
 
<syntaxhighlight lang="smalltalk">(Array new:n withAll:'ha') asStringWith:''.</syntaxhighlight>
By creating a WriteStream, and putting N times the string 'ha' into it:
 
<syntaxhighlight lang="smalltalk">ws := '' writeStream.
n timesRepeat: [ws nextPutAll: 'ha'].
ws contents.</syntaxhighlight>
alternatively:
<syntaxhighlight lang="smalltalk">(String streamContents:[:ws | n timesRepeat: [ws nextPutAll: 'ha']])</syntaxhighlight>
 
all evaluate to:
<pre>
hahahahaha
</pre>
 
A string containing a repeated character is generated with:
<syntaxhighlight lang="smalltalk">String new:n withAll:$*</syntaxhighlight>
 
{{works with|VA Smalltalk}}
<syntaxhighlight lang="smalltalk">(String new:n) atAllPut:$*</syntaxhighlight>
 
=={{header|SNOBOL4}}==
<langsyntaxhighlight lang="snobol4"> output = dupl("ha",5)
end</langsyntaxhighlight>
 
=={{header|Sparkling}}==
<syntaxhighlight lang="sparkling">spn:3> repeat("na", 8) .. " Batman!"
= nananananananana Batman!</syntaxhighlight>
 
=={{header|SQL}}==
<langsyntaxhighlight lang="sql">select rpad('', 10, 'ha')</langsyntaxhighlight>
 
=={{header|SQL PL}}==
{{works with|Db2 LUW}}
<syntaxhighlight lang="sql pl">
VALUES REPEAT('ha', 5);
VALUES RPAD('', 10, 'ha');
</syntaxhighlight>
Output:
<pre>
db2 -t
db2 => VALUES REPEAT('ha', 5);
 
1
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
hahahahaha
 
1 record(s) selected.
 
db2 => VALUES RPAD('', 10, 'ha');
 
1
----------
hahahahaha
 
1 record(s) selected.
</pre>
 
=={{header|Standard ML}}==
<langsyntaxhighlight lang="sml">fun string_repeat (s, n) =
concat (List.tabulate (n, fn _ => s))
;</langsyntaxhighlight>
 
testing in the interpreter:
<langsyntaxhighlight lang="sml">- string_repeat ("Hiuoa", 3) ;
val it = "HiuoaHiuoaHiuoa" : string</langsyntaxhighlight>
 
To repeat a single character:
<langsyntaxhighlight lang="sml">fun char_repeat (c, n) =
implode (List.tabulate (n, fn _ => c))
;</langsyntaxhighlight>
 
=={{header|Stata}}==
<syntaxhighlight lang="stata">. scalar a="ha"
. scalar b=a*5
. display b
hahahahaha</syntaxhighlight>
 
=={{header|Suneido}}==
<langsyntaxhighlight Suneidolang="suneido">'ha'.Repeat(5) --> "hahahahaha"
'*'.Repeat(5) --> "*****"</langsyntaxhighlight>
 
=={{header|Swift}}==
 
=== The Builtin Way ===
 
<syntaxhighlight lang="swift">print(String(repeating:"*", count: 5))</syntaxhighlight>
{{out}}*****
 
=== Functions ===
 
<syntaxhighlight lang="swift">func * (left:String, right:Int) -> String {
return String(repeating:left, count:right)
}
 
print ("HA" * 5)
</syntaxhighlight>
{{out}}
HAHAHAHAHA
 
 
=== Extensions ===
Using extensions to do the repetition which makes for an easier syntax when repeating Strings, and using String.extend() to get faster evaluation.
 
<syntaxhighlight lang="swift">extension String {
// Slower version
func repeatString(n: Int) -> String {
return Array(count: n, repeatedValue: self).joinWithSeparator("")
}
// Faster version
// benchmarked with a 1000 characters and 100 repeats the fast version is approx 500 000 times faster :-)
func repeatString2(n:Int) -> String {
var result = self
for _ in 1 ..< n {
result.appendContentsOf(self) // Note that String.appendContentsOf is up to 10 times faster than "result += self"
}
return result
}
}
 
print( "ha".repeatString(5) )
print( "he".repeatString2(5) )</syntaxhighlight>
{{out}}
<pre>
hahahahaha
hehehehehe
</pre>
 
To repeat a single character:
<syntaxhighlight lang="swift">String(count:5, repeatedValue:"*" as Character)
</syntaxhighlight>
 
Note that using the String version on a string of 1 Character, or the repeat single Character version is timewise close to the same. No point in using the Character version for efficiency (tested with repeating up to 100 000 times).
 
=== Bitwise Iterative Version ===
The following version is an enhanced version of the [http://rosettacode.org/mw/index.php?title=Repeat_a_string#Recursive_version recursive ActionScript], where we're using bit operation along with iterative doubling of the string to get to the correctly repeated version of the text in the most effective manner without recursion. When benchmarked against the plain iterative version in previous section, this version is marginally better, but only my a very small percentage. The critical factor for making the repeat function effective when using larger strings (1000 characters) and multiple repeats (1000 repeats :-) ) was to to exchange the '+=' with 'String.extend' method.
 
<syntaxhighlight lang="swift">extension String {
func repeatBiterative(count: Int) -> String {
var reduceCount = count
var result = ""
var doubled = self
while reduceCount != 0 {
if reduceCount & 1 == 1 {
result.appendContentsOf(doubled)
}
reduceCount >>= 1
if reduceCount != 0 {
doubled.appendContentsOf(doubled)
}
}
return result
}
}
 
"He".repeatBiterative(5)</syntaxhighlight>
{{out}}
<pre>
"HeHeHeHeHe"
</pre>
 
=={{header|Tailspin}}==
<syntaxhighlight lang="tailspin">
'$:1..5 -> 'ha';' -> !OUT::write
</syntaxhighlight>
{{out}}
<pre>hahahahaha</pre>
 
=={{header|Tcl}}==
<langsyntaxhighlight lang="tcl">string repeat "ha" 5 ;# => hahahahaha</langsyntaxhighlight>
 
=={{header|TorqueScript}}==
--[[User:Eepos|Eepos]]
<syntaxhighlight lang="torquescript">function strRep(%str,%int)
{
for(%i = 0; %i < %int; %i++)
{
%rstr = %rstr@%str;
}
 
return %rstr;
}</syntaxhighlight>
 
=={{header|Tosh}}==
<syntaxhighlight lang="tosh">when flag clicked
set String to "meow"
set Count to 4
set Repeated to ""
repeat Count
set Repeated to (join (Repeated) (String))
end
stop this script</syntaxhighlight>
 
=={{header|Transact-SQL}}==
<syntaxhighlight lang="tsql">select REPLICATE( 'ha', 5 )</syntaxhighlight>
 
=={{header|TUSCRIPT}}==
<syntaxhighlight lang ="tuscript">$$ MODE TUSCRIPT
$$ MODE TUSCRIPT
SET text="ha"
SET textrepeatstring=REPEAT (text"ha",5)</lang>
</syntaxhighlight>
 
=={{header|UNIX Shell}}==
===Using printf===
{{works with|Bash}}
{{works with|bash}}
{{works with|ksh93}}
{{works with|zsh}}
<syntaxhighlight lang="bash">printf "ha"%.0s {1..5}</syntaxhighlight>
 
With ksh93 and zsh, the count can vary.
<lang bash>printf "ha%.0s" {1..5}</lang>
 
A slightly more generic version
{{works with|ksh93}}
<lang bash>repeat() {
{{works with|zsh}}
eval "printf '${1}%.0s' {1..${2}}"
<syntaxhighlight lang="bash">i=5
}</lang>
printf "ha"%.0s {1..$i}</syntaxhighlight>
 
With bash, <code>{1..$i}</code> fails, because brace expansion happens before variable substitution. The fix uses <code>eval</code>.
 
{{works with|bash}}
{{works with|ksh93}}
{{works with|zsh}}
<syntaxhighlight lang="bash">i=5
eval "printf 'ha'%.0s {1..$i}"</syntaxhighlight>
 
For the general case, one must escape any % or \ characters in the string, because <code>printf</code> would interpret those characters.
 
{{works with|bash}}
{{works with|ksh93}}
{{works with|zsh}}
<syntaxhighlight lang="bash">reprint() {
typeset e="$(sed -e 's,%,%%,g' -e 's,\\,\\\\,g' <<<"$1")"
eval 'printf "$e"%.0s '"{1..$2}"
}
reprint '% ha \' 5</syntaxhighlight>
 
=== Using repeat ===
{{works with|zsh}}
{{works with|csh}}
 
<syntaxhighlight lang="bash">
len=12; str='='
repeat $len printf "$str"
</syntaxhighlight>
 
===Using head -c===
Line 954 ⟶ 2,908:
{{works with|Bourne Shell}}
 
<langsyntaxhighlight lang="sh">width=72; char='='
head -c ${width} < /dev/zero | tr '\0' "$char"</langsyntaxhighlight>
 
=={{header|Ursala}}==
<langsyntaxhighlight Ursalalang="ursala">#import nat
 
repeat = ^|DlSL/~& iota
Line 964 ⟶ 2,918:
#cast %s
 
example = repeat('ha',5)</langsyntaxhighlight>
output:
<pre>'hahahahaha'</pre>
Line 970 ⟶ 2,924:
=={{header|Vala}}==
Repeat a string 5 times:
<langsyntaxhighlight lang="vala">
string s = "ha";
string copy = "";
for (int x = 0; x < 5; x++)
copy += s;
</syntaxhighlight>
</lang>
 
Fill a string with a char N times:
<langsyntaxhighlight lang="vala">
string s = string.nfill(5, 'c');
</syntaxhighlight>
</lang>
 
=={{header|VBA}}==
<br>'''Repeat a string'''<br>
<lang VBA>
<syntaxhighlight lang="vba">Public Function RepeatStr(aString As String, aNumber As Integer) As String
Dim bString As String, i As Integer
bString = ""
 
For i = 1 To aNumber
bString = aString
bString = bString & aString
If aNumber > 1 Then
Next i
For i = 2 To aNumber
bString RepeatStr = bString & aString
Next i
End If
RepeatStr = bString
End Function
</lang>
 
Debug.Print RepeatStr("ha", 5)</syntaxhighlight>
Sample output:
{{out}}
<pre>
hahahahaha
print RepeatSTr( "Hello world!", 3)
Hello world!Hello world!Hello world!
</pre>
''Note:'' "String(5, "ha") in VBA produces "hhhhh" (only the first character is repeated)!
<p>An alternative method:
<syntaxhighlight lang="vba">Public Function RepeatString(stText As String, iQty As Integer) As String
RepeatString = Replace(String(iQty, "x"), "x", stText)
End Function</syntaxhighlight>
<br>'''Repeat a character'''<br>
<syntaxhighlight lang="vba">Debug.Print String(5, "x")</syntaxhighlight>
{{out}}
<pre>xxxxx</pre>
 
=={{header|VBScript}}==
''Note:'' unlike Visual Basic .NET, "String(5, "ha") in VBA produces "hhhhh" (only the first character is repeated)!
{{works with|Windows Script Host|*}}
<syntaxhighlight lang="vbscript">
' VBScript has a String() function that can repeat a character a given number of times
' but this only works with single characters (or the 1st char of a string):
WScript.Echo String(10, "123") ' Displays "1111111111"
 
' To repeat a string of chars, you can use either of the following "hacks"...
WScript.Echo Replace(Space(10), " ", "Ha")
WScript.Echo Replace(String(10, "X"), "X", "Ha")
</syntaxhighlight>
 
=={{header|Vedit macro language}}==
<syntaxhighlight lang="vedit">Ins_Text("ha", COUNT, 5) </syntaxhighlight>
 
=={{header|Visual Basic}}==
{{works with|Visual Basic|VB6 Standard}}
<br>'''Repeat a string'''<br>
<syntaxhighlight lang="vb">Public Function StrRepeat(s As String, n As Integer) As String
Dim r As String, i As Integer
r = ""
For i = 1 To n
r = r & s
Next i
StrRepeat = r
End Function
Debug.Print StrRepeat("ha", 5)</syntaxhighlight>
{{out}}
<pre>hahahahaha</pre>
 
An alternative method:
<syntaxhighlight lang="vb">Public Function StrRepeat(sText As String, n As Integer) As String
StrRepeat = Replace(String(n, "*"), "*", sText)
End Function</syntaxhighlight>
 
<br>'''Repeat a character'''<br>
<syntaxhighlight lang="vba">Debug.Print String(5, "x")</syntaxhighlight>
{{out}}
<pre>xxxxx</pre>
 
=={{header|Visual Basic .NET}}==
<br>'''Repeat a string'''<br>
Use the PadLeft & PadRight commands:
<syntaxhighlight lang="vb">
<lang vbnet>FileContents = "X".PadRight(FileSizeBytes - 1, "X")
Debug.Print(Replace(Space(5), " ", "Ha"))
</syntaxhighlight>
{{out}}
<pre>
HaHaHaHaHa
</pre>
 
<br>'''Repeat a character'''<br>
Where:
<syntaxhighlight lang="vb">
Debug.Print(StrDup(5, "x"))
Debug.Print("".PadRight(5, "x"))
Debug.Print("".PadLeft(5, "x"))
</syntaxhighlight>
{{out}}
<pre>
xxxxx
xxxxx
xxxxx
</pre>
 
=={{header|Visual FoxPro}}==
Use the built in function REPLICATE(string, number):
<syntaxhighlight lang="vfp">? REPLICATE("HO", 3)</syntaxhighlight>
 
produces
<pre>HOHOHO</pre>
 
=={{header|V (Vlang)}}==
<syntaxhighlight lang="go">// Repeat a string, in V
// Tectonics: v run repeat-a-string.v
module main
import strings
 
// starts here
pub fn main() {
// A strings module function to repeat strings
println(strings.repeat_string("ha", 5))
 
// Another strings module function to repeat a byte
// This indexes the string to get the first byte of the rune array
println(strings.repeat("*"[0], 5))
}</syntaxhighlight>
{{out}}
<pre>prompt$ v run rosetta/repeat-a-string.v
hahahahaha
*****</pre>
 
=={{header|VBScript}}==
 
<syntaxhighlight lang="vb">
* FileContents is the string to populate
replace(string(5,"@"),"@","hello")
* FileSizeBytes is the number of repetitions (Remember that "-1" is valid as we have already specified the first character as being "X", which is to be padded on.
</syntaxhighlight>
</lang>
{{out}}
This produces:
<small>
<pre>
hellohellohellohellohello
"XXXXXXXXXX...........XXXXXXXXX"</pre>
</pre>
</small>
 
=={{header|Wart}}==
<syntaxhighlight lang="wart">def (s * n) :case (string? s)
with outstring
repeat n
pr s
 
("ha" * 5)
=> "hahahahaha"</syntaxhighlight>
 
=={{header|Wortel}}==
<syntaxhighlight lang="wortel">@join "" @rep 5 "ha" ; returns "hahahahaha"</syntaxhighlight>
As a function:
<syntaxhighlight lang="wortel">^(\@join "" @rep)</syntaxhighlight>
 
=={{header|Wren}}==
<syntaxhighlight lang="wren">System.print("ha" * 5)</syntaxhighlight>
 
{{out}}
<pre>
hahahahaha
</pre>
 
=={{header|XPL0}}==
<syntaxhighlight lang="xpl0">cod T=12; int I; for I gets 1,5 do T(0,"ha")</syntaxhighlight>
{{out}}
<pre>hahahahaha</pre>
 
=={{header|Yorick}}==
<langsyntaxhighlight lang="yorick">array("ha", 5)(sum)</langsyntaxhighlight>
 
=={{header|Z80 Assembly}}==
<syntaxhighlight lang="z80">PrintChar equ &BB5A ;Amstrad CPC BIOS call, prints the ascii code in the accumulator to the screen.
 
org &8000
ld b,5 ; repeat 5 times
 
loop:
call PrintImmediate
byte "ha",0
djnz loop
 
ret ; return to basic
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
PrintImmediate:
pop hl ; get the return address into HL, it's the start of the embedded string.
call PrintString
; inc hl ; if your strings are null-terminated you can omit this, since a 0 equals the "NOP" instruction
jp (hl) ; acts as a ret, returning execution to the instruction just after the embedded string.
 
PrintString:
ld a,(hl) ; read in a character from the string
or a ; if your strings are null-terminated you can use this as a shortcut, otherwise use the compare instruction
ret z ; exit once the terminator is reached.
call PrintChar ; BIOS call, all regs are preserved.
inc hl ; next char
jr PrintString ; back to start.</syntaxhighlight>
 
{{out}}
<pre>
hahahahaha
</pre>
 
=={{header|zig}}==
At compile-time:
<syntaxhighlight lang="zig">const laugh = "ha" ** 5;</syntaxhighlight>
Note that to achieve this at run-time in zig (in order to avoid hidden overflows) you must manage the memory yourself.
<syntaxhighlight lang="zig">const std = @import("std");
const warn = std.debug.warn;
 
const Allocator = std.mem.Allocator;
 
fn repeat(s: []const u8, times: u16, allocator: *Allocator) ![]u8 {
const repeated = try allocator.alloc(u8, s.len*times);
 
var i: usize = 0;
while (i < s.len*times) : (i += 1) {
repeated[i] = s[i % 2];
}
 
return repeated;
}
 
pub fn main() !void {
const allocator = std.debug.global_allocator;
const ex = try repeat("ha", 5, allocator);
defer allocator.free(ex);
}</syntaxhighlight>
 
=={{header|zkl}}==
Same as [[#Ruby|Ruby]]
<syntaxhighlight lang="zkl">"ha" * 5 # --> "hahahahaha"</syntaxhighlight>
 
 
 
[[Category: String manipulation]]
885

edits