⚠️ Warning: This is a draft ⚠️

This means it might contain formatting issues, incorrect code, conceptual problems, or other severe issues.

If you want to help to improve and eventually enable this page, please fork RosettaGit's repository and open a merge request on GitHub.

{{task|Basic language learning}}[[Category:String manipulation]][[Category: String manipulation]]{{basic data operation}}[[Category:Simple]] Create a string variable equal to any text value. Create another string variable whose value is the original variable concatenated with another string literal.

To illustrate the operation, show the content of the variables.

;Tasks featuring Strings: {{Template:Strings}}

ABAP

DATA: s1 TYPE string,
      s2 TYPE string.

s1 = 'Hello'.
CONCATENATE s1 ' literal' INTO s2 RESPECTING BLANKS.
WRITE: / s1.
WRITE: / s2.

{{out}}


Hello
Hello literal

Another way

REPORT string_concatenation.

DATA(var1) = 'Hello'.
DATA(var2) = 'Literal'.

cl_demo_output=>new(
          )->begin_section( 'String concatenation using |{ }|'
          )->write( 'Statement: |{ var1 } { var2 }|'
          )->write( |{ var1 } { var2 }|
          )->begin_section( 'String concatenation with new string'
          )->write( 'Statement: |{ var1 } world!|'
          )->write( |{ var1 } world!|
          )->display( ).

{{out}}


Hello literal
Hello world!

ActionScript

package
{
    public class Str
    {
        public static function main():void
        {
            var s:String = "hello";
            trace(s + " literal");
            var s2:String = s + " literal";
            trace(s2);
        }
    }
}

Ada

with Ada.Text_IO;  use Ada.Text_IO;

procedure String_Concatenation is
   S1 : constant String := "Hello";
   S2 : constant String := S1 & " literal";
begin
   Put_Line (S1);
   Put_Line (S2);
end String_Concatenation;

{{out|Sample output}}


Hello
Hello literal

Aime

text s, v;

s = "Hello";
o_(s, "\n");
v = s + ", World!";
o_(v, "\n");

{{out}}

Hello
Hello, World!

Apex


String s1 = 'Hello ';
String s2 = 'Salesforce Developer!';

String s3 = s1+s2;

// Print output
System.debug(s3);

{{out}}

Hello Salesforce Developer!

AppleScript

try
    set endMsg to "world!"
    set totMsg to "Hello, " & endMsg
    display dialog totMsg
end try

ARM Assembly

{{works with|as|Raspberry Pi}}


/* ARM assembly Raspberry PI  */
/*  program strConcat.s   */

/* Constantes    */
.equ STDOUT, 1                           @ Linux output console
.equ EXIT,   1                           @ Linux syscall
.equ WRITE,  4                           @ Linux syscall
/* Initialized data */
.data
szMessFinal:   .asciz "The final string is \n"

szString:            .asciz "Hello "
szString1:           .asciz " the world. \n"

/* UnInitialized data */
.bss
szFinalString:   .skip 255

/*  code section */
.text
.global main
main:
                                         @ load string
    ldr r1,iAdrszString
	ldr r2,iAdrszFinalString
    mov r4,#0
1:
    ldrb r0,[r1,r4]                      @ load byte of string
    strb r0,[r2,r4]
    cmp r0,#0                            @ compar with zero ?
    addne r4,#1
    bne 1b
    ldr r1,iAdrszString1
    mov r3,#0
2:
    ldrb r0,[r1,r3]                      @ load byte of string 1
    strb r0,[r2,r4]
    cmp r0,#0                            @ compar with zero ?
    addne r4,#1
    addne r3,#1
    bne 2b
    mov r0,r2                            @ display final string
    bl affichageMess
100:                                     @ standard end of the program */
    mov r0, #0                           @ return code
    mov r7, #EXIT                        @ request to exit program
    svc 0                                @ perform the system call
iAdrszString:             .int szString
iAdrszString1:            .int szString1
iAdrszFinalString:       .int szFinalString
iAdrszMessFinal:          .int szMessFinal

/******************************************************************/
/*     display text with size calculation                         */
/******************************************************************/
/* r0 contains the address of the message */
affichageMess:
    push {r0,r1,r2,r7,lr}                       @ save  registers
    mov r2,#0                                   @ counter length */
1:                                              @ loop length calculation
    ldrb r1,[r0,r2]                             @ read octet start position + index
    cmp r1,#0                                   @ if 0 its over
    addne r2,r2,#1                              @ else add 1 in the length
    bne 1b                                      @ and loop
                                                @ so here r2 contains the length of the message
    mov r1,r0                                   @ address message in r1
    mov r0,#STDOUT                              @ code to write to the standard output Linux
    mov r7, #WRITE                              @ code call system "write"
    svc #0                                      @ call systeme
    pop {r0,r1,r2,r7,lr}                        @ restaur des  2 registres
    bx lr                                       @ return


AutoHotkey

s := "hello"
Msgbox, %s%
s1 := s . "  literal" ;the . is optional
Msgbox, %s1%

AWK

The AWK concatenation operator is nothing.

BEGIN {
   s = "hello"
   print s " literal"
   s1 = s " literal"
   print s1
}

Axe

Lbl CONCAT
Copy(r₁,L₁,length(r₁))
Copy(r₂,L₁+length(r₁),length(r₂)+1)
L₁
Return

ALGOL 68

{{works with|ALGOL 68|Revision 1 - no extensions to language used}} {{works with|ALGOL 68G|Any - tested with release [http://sourceforge.net/projects/algol68/files/algol68g/algol68g-1.18.0/algol68g-1.18.0-9h.tiny.el5.centos.fc11.i386.rpm/download 1.18.0-9h.tiny]}} {{works with|ELLA ALGOL 68|Any (with appropriate job cards) - tested with release [http://sourceforge.net/projects/algol68/files/algol68toc/algol68toc-1.8.8d/algol68toc-1.8-8d.fc9.i386.rpm/download 1.8-8d]}}

STRING s := "hello";
print ((s + " literal", new line));
STRING s1 := s + " literal";
print ((s1, new line))

{{out}}


hello literal
hello literal

Arturo

str1 "Hello "
str2 "World"

print str1 + str2 + "!"

{{out}}

Hello World!

BASIC

{{works with|QuickBasic|4.5}} {{works with|Liberty BASIC}}

s$ = "hello"
print s$;" literal" 'or s$ + " literal"
s2$ = s$ + " literal"
print s2$

{{out}}

hello literal
hello literal

=

Applesoft BASIC

=

S$ = "HELLO"
PRINT S$;" LITERAL" :REM OR S$ + " LITERAL"
S2$ = S$ + " LITERAL"
PRINT S2$

=

BBC BASIC

=

      stringvar1$ = "Hello,"
      stringvar2$ = stringvar1$ + " world!"
      PRINT "Variable 1 is """ stringvar1$ """"
      PRINT "Variable 2 is """ stringvar2$ """"

{{out}}

Variable 1 is "Hello,"
Variable 2 is "Hello, world!"

==={{header|IS-BASIC}}=== 100 LET S$="Hello" 110 LET S$=S$&" world!" 120 PRINT S$



=
## ZX Spectrum Basic
=

```zxbasic
10 LET s$="Hello"
20 LET s$=s$+" World!"
30 PRINT s$

Batch File

set string=Hello
echo %string% World
set string2=%string% World
echo %string2%

Bracmat

"Hello ":?var1
& "World":?var2
& str$(!var1 !var2):?var12
& put$("var1=" !var1 ", var2=" !var2 ", var12=" !var12 "\n")

{{out}}

var1= Hello  , var2= World , var12= Hello World

Burlesque

blsq ) "Hello, ""world!"?+
"Hello, world!"

C

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *sconcat(const char *s1, const char *s2)
{
  char *s0 = malloc(strlen(s1)+strlen(s2)+1);
  strcpy(s0, s1);
  strcat(s0, s2);
  return s0;
}

int main()
{
   const char *s = "hello";
   char *s2;

   printf("%s literal\n", s);
   /* or */
   printf("%s%s\n", s, " literal");

   s2 = sconcat(s, " literal");
   puts(s2);
   free(s2);
}

ChucK

"Hello" => string A; A + " World!" => string B; <<< B >>>;

{{out}}

```txt
"Hello World!"

C++

#include <string>
#include <iostream>

int main() {
   std::string s = "hello";
   std::cout << s << " literal" << std::endl;
   std::string s2 = s + " literal";
   std::cout << s2 << std::endl;
   return 0;
}

{{out}}

hello literal
hello literal

C#

using System;

class Program {
    static void Main(string[] args) {
        var s = "hello";
        Console.Write(s);
        Console.WriteLine(" literal");
        var s2 = s + " literal";
        Console.WriteLine(s2);
    }
}

Clojure

(def a-str "abcd")
(println (str a-str "efgh"))

(def a-new-str (str a-str "efgh"))
(println a-new-str)

COBOL

With the STRING verb:

       IDENTIFICATION DIVISION.
       PROGRAM-ID. Concat.

       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01  Str  PIC X(7) VALUE "Hello, ".
       01  Str2 PIC X(15).

       PROCEDURE DIVISION.
           DISPLAY "Str  : " Str
           STRING Str " World!" DELIMITED BY SIZE INTO Str2
           DISPLAY "Str2 : " Str2

           GOBACK
           .

Alternate method using the CONCATENATE intrinsic function:

       ...
       PROCEDURE DIVISION.
           DISPLAY "Str  : " Str
           MOVE FUNCTION CONCATENATE(Str, " World!") TO Str2
           DISPLAY "Str2 : " Str2

           GOBACK
           .

String literals can also be concatenated in the follwing ways:

*      *> Using a '&'.
       01  Long-Str-Val     PIC X(200) VALUE "Lorem ipsum dolor sit "
           & "amet, consectetuer adipiscing elit, sed diam nonummy "
           & "nibh euismod tincidunt ut laoreet dolore magna aliquam "
           & "erat volutpat.".

*      *> Using a '-' in column 7. Note the first two literals have no
*      *> closing quotes.
       01  Another-Long-Str PIC X(200) VALUE " Ut wisi enim ad minim
      -    "veniam, quis nostrud exerci tation ullamcorper suscipit
      -    "lobortis nisl ut aliquip ex ea commodo consequat".

Common Lisp

(let ((s "hello"))
    (format t "~a there!~%" s)
    (let* ((s2 " there!")
           (s (concatenate 'string s s2)))
        (format t "~a~%" s)))
(defparameter *s* "hello")
(print (concatenate 'string *s* " literal"))
(defparameter *s1* (concatenate 'string *s* " literal"))
(print *s1*)

Component Pascal

BlackBox Component Builder


MODULE StringConcatenation;
IMPORT StdLog;

PROCEDURE Do*;
VAR
	str1,str2: ARRAY 128 OF CHAR;
BEGIN
	str1 := "Hello";
	str2 := str1 + " world";
	StdLog.String(":> " + str2);StdLog.Ln
END Do;

END StringConcatenation.

Execute: ^Q StringConcatenation.Do
{{out}}


:> Hello world

D

import std.stdio;

void main() {
    string s = "hello";
    writeln(s ~ " world");
    auto s2 = s ~ " world";
    writeln(s2);
}

DCL

$ string1 = "hello"
$ string2 = string1 + " world"
$ show symbol string*

{{out}}

  STRING1 = "hello"
  STRING2 = "hello world"

Delphi

program Concat;

{$APPTYPE CONSOLE}

var
  s1, s2: string;
begin
  s1 := 'Hello';
  s2 := s1 + ' literal';
  WriteLn(s1);
  WriteLn(s2);
end.

=={{header|Déjà Vu}}==

local :s1 "hello"
local :s2 concat( s1 ", world" )
!print s2

{{out}}

hello, world

DWScript

var s1 := 'Hello';
var s2 := s1 + ' World';

PrintLn(s1);
PrintLn(s2);

Dyalect

{{trans|Swift}}

var s = "hello"
print(s + " literal")
var s1 = s + " literal"
print(s1)

Dylan.NET


//to be compiled using dylan.NET v. 11.5.1.2 or later.
#refstdasm mscorlib.dll

import System

assembly concatex exe
ver 1.3.0.0

class public Program

   method public static void main()
        var s as string = "hello"
        Console::Write(s)
        Console::WriteLine(" literal")
        var s2 as string = s + " literal"
        Console::WriteLine(s2)
  end method

end class

EasyLang

a$ = "hello" b$ = a$ & " world" print b$




## Ela

Strings in Ela support a polymorphic concatenation operator (++):

```ela
hello = "Hello"
hello'world = hello ++ ", " ++ "world"
(hello, hello'world)

{{out}}

("Hello", "Hello, world!")

However, as long as strings in Ela are indexed arrays, this operator is not very effective for a large number of concatenations. Therefore one can use an alternate technique (a pure StringBuilder type defined in standard prelude). The resulting code would look like so:

toString $ "Hello" +> ", " +> "world"

The (+>) token is a type constructor. Therefore the result of its application is an instance of type StringBuilder. In order to produce a string one should call a polymorphic toString function at the end as shown above.

Elena

ELENA 4.x:

public program()
{
    var s := "Hello";
    var s2 := s + " literal";

    console.writeLine:s;
    console.writeLine:s2;
    console.readChar()
}

{{out}}


Hello
Hello literal

Elixir


s = "hello"
t = s <> " literal"

IO.puts s
IO.puts t

{{out}}


hello
hello literal

Emacs Lisp

version 1


(defun glue (str1 str2)
  (concat str1 str2) )

version 2


(defun glue (str1 str2)
  (format "%s%s" str1 str2) )

Eval:


(setq str1 "Hello, ")
(setq str2 "World!")
(insert (glue str1 str2) )

Output:


Hello, World!

Erlang

S = "hello",
S1 = S ++ " literal",
io:format ("~s literal~n",[S]),
io:format ("~s~n",[S1])

{{out|Sample output}}


hello literal
hello literal

ERRE


  ..........
  S$="HELLO"
  PRINT(S$;" LITERAL") ! or S$+" LITERAL"
  S2$=S$+" LITERAL"
  PRINT(S2$)
  ..........

Euphoria

sequence s, s1
s = "hello"
puts(1, s & " literal")
puts(1,'\n')
s1 = s & " literal"
print (1, s1))
puts(1,'\n')

{{out}} hello literal hello literal

Excel

Take three cells, say A1,B1 and C1. In C1, type in :



=CONCATENATE(A1;" ";B1)


As the text in A1 and/or B1 is changed, C1 will be updated.

Hello World Hello World



=={{header|F_Sharp|F#}}==
{{trans|C#}}

```fsharp
open System

[<EntryPoint>]
let main args =
    let s = "hello"
    Console.Write(s)
    Console.WriteLine(" literal")
    let s2 = s + " literal"
    Console.WriteLine(s2)
    0

Factor

"wake up" [ " sheeple" append print ] [ ", you sheep" append ] bi print

Falcon

'''VBA/Python programmer's approach. I'm just a junior Falconeer but this code seems falconic''


/* created by Aykayayciti Earl Lamont Montgomery
April 9th, 2018 */

s = "critical"
> s + " literal"
s2 = s + " literal"
> s2

{{out}}


critical literal
critical literal
[Finished in 0.2s]

Fantom

Illustrating in fansh:

 a := "abc"
abc
fansh> b := a + "def"
abcdef
fansh> a
abc
fansh> b
abcdef

Forth

{{works with|GNU Forth}}

s" hello" pad place
pad count type
s"  there!" pad +place    \ +place is called "append" on some Forths
pad count type

Fortran

program StringConcatenation

integer, parameter          :: maxstringlength = 64
character (maxstringlength) :: s1, s = "hello"

print *,s // " literal"
s1 = trim(s) // " literal"
print *,s1

end program

FreeBASIC

' FB 1.05.0 Win64

Var s1 = "String"
Var s2 = s1 + " concatenation"
Print s1
Print s2
Sleep

{{out}}


String
String concatenation

Frink


a = "Frink"
b = a + " rules!"
println[b]

Gambas

In gambas, the ampersand symbol is used as a concatenation operator:

'''[https://gambas-playground.proko.eu/?gist=098450adbbe0e284f0b9cdac67d74dda Click this link to run this code]'''

Public sub main()
DIM bestclub AS String
DIM myconcat AS String

bestclub = "Liverpool"
myconcat = bestclub & " Football Club"

Print myconcat

End

GlovePIE

var.text1="Hello, "
debug=var.text1+"world!"

Go

package main

import "fmt"

func main() {
    // text assigned to a string variable
    s := "hello"

    // output string variable
    fmt.Println(s)

    // this output requested by original task descrption, although
    // not really required by current wording of task description.
    fmt.Println(s + " literal")

    // concatenate variable and literal, assign result to another string variable
    s2 := s + " literal"

    // output second string variable
    fmt.Println(s2)
}

{{out}}


hello
hello literal
hello literal

Golfscript

"Greetings ":s;
s"Earthlings"+puts
s"Earthlings"+:s1;
s1 puts

Groovy

def s = "Greetings "
println s + "Earthlings"

def s1 = s + "Earthlings"
println s1

{{out}}

Greetings Earthlings
Greetings Earthlings

Halon

The dot (concatenation) operator may cast datatypes to strings.

echo "Hello" . "World " . 123;

Haskell

import System.IO
s = "hello"
s1 = s ++ " literal"
main = do putStrLn (s ++ " literal")
          putStrLn s1

HicEst

CHARACTER s = "hello", sl*100

WRITE() s // " literal"
sl = s // " literal"
WRITE() sl

=={{header|Icon}} and {{header|Unicon}}==

procedure main()
s1 := "hello"
write(s2 := s1 || " there.")  # capture the reuslt for
write(s2)                     # ... the 2nd write
end

IDL

s1='Hello'
print, s1 + ' literal'
s2=s1 + ' literal'
print, s2

J

   s1 =. 'Some '
   ]s1, 'text '
Some text
   ]s2 =. s1 , 'more text!'
Some more text!

For more info see:

  • http://www.jsoftware.com/help/dictionary/d320.htm on ,
  • http://www.jsoftware.com/help/dictionary/d500.htm on ]

Java

public class Str{
   public static void main(String[] args){
      String s = "hello";
      System.out.println(s + " literal");
      String s2 = s + " literal";
      System.out.println(s2);
   }
}

{{out}}

hello literal
hello literal

JavaScript

var s = "hello"
print(s + " there!")

jq

"hello" as $s | $s + " there!"

{{Out}}

Use the -r command-line option if you wish

to suppress the string quotation marks

hello there!

Julia

s = "hello"
println(s * " there!")

K

Translation of J code:


s1: "Some "
s1, "text "
s2: s1 , "more text!"

{{out}}


"Some "
"Some text"
"Some more text!"

Kotlin

fun main(args: Array<String>) {
    val s1 = "James"
    val s2 = "Bond"
    println(s1)
    println(s2)
    val s3 = s1 + " " + s2
    println(s3)
}

{{Out}}

James
Bond
James Bond

LabVIEW

The two input on the left are String Controls, the output on the right is a String Indicator. All of them can be placed on the Front Panel. The Concatenate Strings function can be placed on the Block Diagram. You can switch between the Front Panel and the Block Diagram by pressing Ctrl+E.

[[File:LV_strcat.png]]

Lang5

: concat  2 compress "" join ;
'hello " literal" concat

Lasso

local(x = 'Hello')
local(y = #x + ', World!')
#x // Hello
#y // Hello, World!

Liberty BASIC

See [[#BASIC|BASIC]].

Lingo

a = "Hello"
b = a & " world!"
put b
-- "Hello world!"

Lisaac

Section Header

+ name := STRING_CONCATENATION;

Section Public

- main <- (
  + sc : STRING_CONSTANT;
  + sv : STRING;

  sc := "Hello";
  (sc + " literal").println;

  sv := sc + " literal";
  sv.println;

);

LiveCode

local str="live"
put str & "code" into str2
put str && str2

Output

live livecode
make "s "hello
print word :s "| there!|

Lua

a = "hello "
print(a .. "world")
c = a .. "world"
print(c)

M2000 Interpreter

M2000 Environment is an application written in Visual Basic 6, so can use strings UTF16LE (max 2GByte), and Ansi strings. So here is an example which add two Ansi strings. To print them to console we have to convert to UTF16LE. We can use ansi strings for files and for buffers (memory blocks). Conversion use Locale (so Locale 1032 can be used for Greek Ansi codepage)

A memory word is two bytes.


Module CheckString {
      s$ = "hello"
      PRINT s$;" literal" 'or s$ + " literal"
      s2$ = s$ + " literal"
      PRINT s2$
      Print Len(s2$)=13
      \\ get an ansi string
      k$=Str$("Hello")
      Print Len(k$)=2.5  ' 2.5 words or 5 bytes
      Print Chr$(k$)
      k2$=k$+Str$(" literal")
      Print Len(k2$)=6.5  ' 13 bytes
      Print Chr$(k2$)
      Print Len(Chr$(k2$))=13 ' words
}
CheckString

Maple

str := "Hello":
newstr := cat(str,", world!"):
str;
newstr;

{{out}}


                            "Hello"
                        "Hello, world!"

Mathematica

str= "Hello ";
str<>"Literal"

=={{header|MATLAB}} / {{header|Octave}}==

 string1 = '1 Fish'

string1 =

1 Fish

>> string2 = [string1 ', 2 Fish, Red Fish, Blue Fish']

string2 =

1 Fish, 2 Fish, Red Fish, Blue Fish

Maxima

s: "the quick brown fox";
t: "jumps over the lazy dog";
sconcat(s, " ", t);
/* "the quick brown fox jumps over the lazy dog" */

Mercury

:- module string_concat.
:- interface.

:- import_module io.
:- pred main(io::di, io::uo) is det.

:- implementation.
:- import_module string.

main(!IO) :-
    S = "hello",
    S1 = S ++ " world",
    io.write_string(S, !IO), io.nl(!IO),
    io.write_string(S1, !IO), io.nl(!IO).

min

{{works with|min|0.19.3}}

"butter" :a
(a "scotch")=> "" join :b
a puts!
b puts!

{{out}}


butter
butterscotch

MiniScript

s = "hello"
print s + " world!"

{{output}}

hello world!

MUMPS

STRCAT
 SET S="STRING"
 WRITE !,S
 SET T=S_" LITERAL"
 WRITE !,T
 QUIT

{{out}}


CACHE>D STRCAT^ROSETTA

STRING
STRING LITERAL

M4

M4 has macros rather than variables, but a macro expanded can work like a variable.

define(`concat',`$1$2')dnl
define(`A',`any text value')dnl
concat(`A',` concatenated with string literal')
define(`B',`concat(`A',` and string literal')')dnl
B

MAXScript

s = "hello"
print (s + " literal")
s1 = s + " literal"
print s1

Metafont

string a, b;
a := "String";
message a & " literal";
b := a & " literal";
message b;

=={{header|Modula-3}}== Strings in Modula-3 are called TEXTs. Concatenation can use &, just like [[Ada]].

MODULE Concat EXPORTS Main;

IMPORT IO;

VAR string: TEXT := "String";
    string1: TEXT;

BEGIN
  IO.Put(string & " literal.\n");
  string1 := string & " literal.\n";
  IO.Put(string1);
END Concat.

Modula-3 also provides modules for dealing with TEXTs, such as Text.

string1 := Text.Concat(string, " literal.\n");

Neko

/**
 String concatenation, in Neko
 Tectonics:
    nekoc string-concatenation.neko
    neko string-concatenation [addon]
*/

var arg = $loader.args[0]
var addon
if arg != null addon = $string(arg)

var s = "abc"
$print("s: ", s, "\n")

var c = s + "def"
$print("c: ", c, "\n")

if arg != null {
    c += addon
    $print("addon: ", addon, "\n")
    $print("c: ", c, "\n")
}

{{out}}

prompt$ nekoc string-concatenation.neko
prompt$ neko string-concatenation.n xyz
s: abc
c: abcdef
addon: xyz
c: abcdefxyz

Nemerle

Can be done with Concat() method or + operator:

using System;
using System.Console;
using Nemerle.Utility.NString; // contains method Concat()

module Stringcat
{
    Main() : void
    {
        def text1 = "This string has";
        def cat1  = Concat( " ", [text, "been concatenated"]);
        def cat2  = text1 + " also been concatenated";
        Write($"$cat1\n$cat2\n");
    }
}

NetRexx

/* NetRexx */

options replace format comments java crossref savelog symbols

s1 = 'any text value'
s2 = 'another string literal'
s3 = s1    s2 -- concatenate variables with blank space (note that only one blank space is added)
s4 = s1 || s2 -- concatenate variables with abuttal (here, no blank spaces are added)
s5 = s1    'another string literal' -- concatenate a variable and a literal with blank space
s6 = s1'another string literal'     -- concatenate a variable and a literal using abuttal
s7 = s1 || 'another string literal' -- ditto

say 's1:' s1 -- concatenation with blank space is employed here too
say 's2:' s2
say 's3:' s3
say 's4:' s4
say 's5:' s5
say 's6:' s6
say 's7:' s7

{{out}}


s1: any text value
s2: another string literal
s3: any text value another string literal
s4: any text valueanother string literal
s5: any text value another string literal
s6: any text valueanother string literal
s7: any text valueanother string literal

NewLISP

(let (str1 "foo")
     (println str1)
     (let (str2 (string str1 "bar"))
	  (println str2)))

Nim

Strings can be concatenated with &.

var str, str1 = "String"
echo(str & " literal.")
str1 = str1 & " literal."
echo(str1)

# -> String literal.

Strings can be concatenated as arrays and joined with a separating characters:

var str1 = "String"
echo(join([str1, " literal.", "HelloWorld!"], "~~"))

# -> String~~ literal.~~HelloWorld!

Strings can be combined using string formatting:

var str1 = "String"
echo "$# $# $#" % [str1, "literal.", "HelloWorld!"]

# -> String literal. HelloWorld!

=={{header|NS-HUBASIC}}== 10 STRING$="HELLO" 20 STRING$=STRING$+" WORLD!" 30 PRINT STRING$




## Objeck


```objeck
bundle Default {
  class Repeat {
    function : Main(args : String[]) ~ Nil {
      s := "hello";
      s->PrintLine();
      " literal"->PrintLine();
      s->Append(" literal");
      s->PrintLine();
    }
  }
}

=={{header|Objective-C}}==



int main()
{
  @autoreleasepool {

    NSString *s = @"hello";
    printf("%s%s\n", [s UTF8String], " literal");

    NSString *s2 = [s stringByAppendingString:@" literal"];
    // or, NSString *s2 = [NSString stringWithFormat:@"%@%@", s, @" literal"];
    puts([s2 UTF8String]);
    /* or */
    NSMutableString *s3 = [NSMutableString stringWithString: s];
    [s3 appendString: @" literal"];
    puts([s3 UTF8String]);

  }
  return 0;
}

OCaml

let s = "hello"
let s1 = s ^ " literal"
let () =
  print_endline (s ^ " literal");
  print_endline s1

Oforth

.s show the stack :

"Hello" dup " World!" + .s

{{out}}


[1] (String) Hello World!
[2] (String) Hello

Openscad

a="straw";
b="berry";
c=str(a,b);    /* Concatenate a and b */
echo (c);

Oz

Strings are lists and are concatenated with the "Append" function. However, often "virtual strings" are used instead. [http://www.mozart-oz.org/home/doc/base/virtualstring.html "Virtual string are designed as a convenient way to combine strings, byte strings, atoms, integers and floats to compound strings without explicit concatenation and conversion"].

declare
S = "hello"
{System.showInfo S#" literal"} %% virtual strings are constructed with "#"
S1 = {Append S " literal"}
{System.showInfo S1}

PARI/GP

s = "Hello ";
s = Str(s, "world");
\\ Alternately, this could have been:
\\ s = concat(s, "world");
print(s);

Pascal

Program StringConcat;
  Var
     s, s1   : String;

Begin
    s := 'hello';
    writeln(s + ' literal');
    s1 := concat(s, ' literal');
    { s1 := s + ' literal'; works too, with FreePascal }
    writeln(s1);
End.

Perl

my $s = 'hello';
print $s . ' literal', "\n";
my $s1 = $s . ' literal';
print $s1, "\n";

An example of destructive concatenation:

$s .= ' literal';
print $s, "\n";

Perl 6

{{works with|Rakudo|#22 "Thousand Oaks"}}

my $s = 'hello';
say $s ~ ' literal';
my $s1 = $s ~ ' literal';
say $s1;

# or, using mutating concatenation:

$s ~= ' literal';
say $s;

Note also that most concatenation in Perl 6 is done implicitly via interpolation.

Phix

string s1 = "at"                                ?s1
string s2 = "c"&s1                              ?s2
string s3 = "s"&s1                              ?s3
string s4 = "m"&s1                              ?s4
string s5 = "The "&s2&" "&s3&" on the "&s4&"."  ?s5

{{out}}


"at"
"cat"
"sat"
"mat"
"The cat sat on the mat."

PHL

module stringcat;

extern printf;

@Integer main [ var a = "hello"; var b = a + " literal"; printf("%s\n", b);

return 0;

]




## PHP


```php
<?php
$s = "hello";
echo $s . " literal" . "\n";
$s1 = $s . " literal";
echo $s1 . "\n";
?>

PicoLisp

(let Str1 "First text"
   (prinl Str1 " literal")
   (let Str2 (pack Str1 " literal")
      (prinl Str2) ) )

PL/I

declare (s, t) character (30) varying;

s = 'hello from me';
display (s || ' to you.' );
t = s || ' to you all';
display (t);

PowerShell

$s = "Hello"
Write-Host $s World.

# alternative, using variable expansion in strings
Write-Host "$s World."

$s2 = $s + " World."
Write-Host $s2

PureBasic

If OpenConsole()

  s$ = "hello"
  PrintN( s$ + " literal")
  s2$ = s$ + " literal"
  PrintN(s2$)

  Print(#CRLF$ + #CRLF$ + "Press ENTER to exit")
  Input()
  CloseConsole()
EndIf

Python

s1 = "hello"
print s1 + " world"

s2 = s1 + " world"
print s2

{{out}}

hello world
hello world

When concatenating many strings, it is more efficient to use the join method of a string object, which takes a list of strings to be joined. The string on which join is called is used as a separator.

s1 = "hello"
print ", ".join([s1, "world", "mom"])

s2 = ", ".join([s1, "world", "mom"])
print s2

{{out}}

hello, world, mom
hello, world, mom

R

hello <- "hello"
paste(hello, "literal") # "hello literal"
hl <- paste(hello, "literal") #saves concatenates string to a new variable
paste("no", "spaces", "between", "words", sep="") # "nospacesbetweenwords"

Racket

#lang racket
(define hello "hello")
(displayln hello)

(define world (string-append hello " " "world" "!"))
(displayln world)

;outputs:
;  hello
;  hello world!

Raven

# Cat strings
"First string and " "second string" cat print

# Join
[ "First string" "second string" "third string" ] " and " join print

# print
[ "First string" "second string" "third string" ] each print

# Formatted print
"\n" "Third string" "Second string" "First string" "%s %s %s %s" print

# Heredoc
" - NOT!!" as $x
"This is the only way to do it%($x)s" print

{{out}}

First string and second string
First string and second string and third string
First stringsecond stringthird string
First string Second string Third string

This is the only way to do it - NOT!!

REBOL

s: "hello"
print s1: rejoin [s " literal"]
print s1

Red

str1: "Hello"
>>str2: append str1 " World"
>> print str2
Hello World
>> print str1
Hello World

REXX

s = "hello"
say s "literal"
t = s "literal"    /* Whitespace between the two strings causes a space in the output */
say t

                        /* The above method works without spaces too */
genus="straw"
say genus"berry"        /* This outputs strawberry */
say genus || "berry"    /* Concatenation using a doublepipe does not cause spaces */

Retro

with strings'
"hello" "literal" append puts

Ring


aString = "Welcome to the "
bString = "Ring Programming Language"

see astring + bString + nl

Ruby

s = "hello"
p s + " literal"        #=> "hello literal"
s1 = s + " literal"
p s1                    #=> "hello literal"
s1 << " another" # append to s1
p s1                    #=> "hello literal another"

s = "hello"
p s.concat(" literal")  #=> "hello literal"
p s                     #=> "hello literal"

Rust

fn main() {
    let s = "hello".to_owned();
    println!("{}", s);

    let s1 = s + " world";
    println!("{}", s1);
}

SAS

data _null_;
   a="Hello,";
   b="World!";
   c=a !! " " !! b;
   put c;
   *Alternative using the catx function;
   c=catx (" ", a, b);
   put c;
run;

Sather

class MAIN is
  main is
    s ::= "hello";
    #OUT + s + " literal\n";
    s2 ::= s + " literal";
    #OUT + s2 + "\n";
  end;
end;

Scala

Evaluation in a Scala worksheet, to val f2 is an anonymous function assigned.

  val s = "hello"                                 //> s  : String = hello
  val s2 = s + " world"                           //> s2  : String = hello world
  val f2 = () =>  " !"                            //> f2  : () => String = <function0>

  println(s2 + f2())                              //> hello world !

Scheme

(define s "hello")
(display (string-append s " literal"))
(newline)
(define s1 (string-append s " literal"))
(display s1)
(newline)

Scilab

s1="Hello" s1+" world!" s2=s1+" world" s2


{{out}}
<pre style="height:20ex> --> s1="Hello"
 s1  =
 Hello
 -->s1+" world!"
 ans  =
 Hello world!
 -->s2=s1+" world!"
 s2  =
 Hello world!
 -->s2
 Hello world!

Seed7

$ include "seed7_05.s7i";

const proc: main is func
  local
    var string: s is "hello";
    var string: s2 is "";
  begin
    writeln(s <& " world");
    s2 := s & " world";
    writeln(s2);
  end func;

{{out}}


hello world
hello world

Sidef

var s = 'hello';
say s+' literal';
var s1 = s+' literal';
say s1;

An example of destructive concatenation:

s += ' literal';
say s;

Simula

TEXT PROCEDURE concatenate(head, tail);
    TEXT head, tail;
BEGIN TEXT c;
    c :- blanks(head.length + tail.length);
    c.sub(c.start, head.length) := head; ! putText(), anyone?;
    c.sub(c.start + head.length, tail.length) := tail;
    concatenate:- c;
END;

TEXT stringVariable, another;
stringVariable :- "head ";
another :- concatenate(stringVariable, "and tail");
OutText("stringVariable: """); OutText(stringVariable);
OutText(""", another: "); OutText(another); Outimage;

Slate

define: #s -> 'hello'.
inform: s ; ' literal'.
define: #s1 -> (s ; ' literal').
inform: s1.

Smalltalk

|s s1| s := 'hello'.
(s,' literal') printNl.
s1 := s,' literal'.
s1 printNl.

SNOBOL4

	greet1 = "Hello, "
	output = greet1
	greet2 = greet1 "World!"
	output = greet2
end

Sparkling

let s1 = "Hello";
let s2 = " world!";
print(s1 .. s2); // prints "Hello world!"

Standard ML

val s = "hello"
val s1 = s ^ " literal\n"
val () =
  print (s ^ " literal\n");
  print s1

Stata

Stata string scalars

sca a = "foo"
sca b = "bar"
sca c = a+b
di c
  foobar

Mata

a = "foo"
b = "bar"
c = a+b
c
  foobar

Swift

let s = "hello"
println(s + " literal")
let s1 = s + " literal"
println(s1)

Tcl

set s hello
puts "$s there!"
append s " there!"
puts $s

You can also just group the strings to concatenate together at the point where they are used, using Tcl's built-in syntactic concatenation:

set s "Hello "
set t "World"
set u "!"
puts $s$t$u  ;# There is nothing special here about using puts; just an example

=={{header|TI-83 BASIC}}==

"HELLO"→Str0
Str0+" WORLD!"→Str0

{{out}}

HELLO WORLD!

=={{header|TI-89 BASIC}}==

"aard" → sv
Disp sv & "vark"
sv & "wolf" → sv2

TorqueScript

%string = "Hello";
echo(%string);
%other = " world!";
echo(%other);
echo(%string @ %other);

TUSCRIPT

$$ MODE TUSCRIPT
s = "Hello "
print s, "literal"

s1 = CONCAT (s,"literal")
print s1

{{out}}


Hello literal
Hello literal

UNIX Shell

{{works with|Bourne Shell}} {{works with|bash}}

s="hello"
echo "$s literal"
s1="$s literal"    # This method only works with a space between the strings
echo $s1

# To concatenate without the space we need squiggly brackets:
genus='straw'
fruit=${genus}berry  # This outputs the word strawberry
echo $fruit

UnixPipes

echo "hello"
 | xargs -n1 -i echo {} literal

Ursa

decl string s1 s2
# make s1 contain "hello "
set s1 "hello "

# set s2 to contain s1 and "world"
set s2 (+ s1 "world")

# outputs "hello world"
out s2 endl console

Visual Basic

{{works with|Visual Basic|VB6 Standard}} works the same as in VBA, see [[String_concatenation#VBA]]

Visual Basic .NET

'''Platform:''' [[.NET]] {{works with|Visual Basic .NET|9.0+}}

s = "Hello"
Console.WriteLine(s & " literal")
s1 = s + " literal"
Console.WriteLine(s1)

VBA


Option Explicit

Sub String_Concatenation()
Dim str1 As String, str2 As String

    str1 = "Rosetta"
    Debug.Print str1
    Debug.Print str1 & " code!"
    str2 = str1 & " code..."
    Debug.Print str2 & " based on concatenation of : " & str1 & " and code..."
End Sub

{{out}}


Rosetta
Rosetta code!
Rosetta code... based on concatenation of : Rosetta and code...

Wee Basic

let string1$="Hello "
let string2$="world!"
print 1 string1$+string2$
end

XPL0

func Concat(S1, S2, S3);        \Concatenate strings: S3:= S1 + S2
char S1, S2, S3;
int  C, I, J;
[I:= 0;
repeat  C:= S1(I);
        S3(I):= C & $7F;        \remove MSb terminator from first string
        I:= I+1;
until   C >= $80;
J:= 0;
repeat  C:= S2(J);
        S3(I+J):= C;
        J:= J+1;
until   C >= $80;
return S3;
];

code Text=12;
char A, B, C(80);
[A:= "Hello";
 B:= " World!";
Concat(A, B, C);
Text(0, C);
]

Yorick

var1 = "Hello";
var2 = var1 + ", world!";
write, var1;
write, var2;

zkl

var s="Hello";
s2:=s+", world!"; s2.println(); //-->Hello, world!
s3:=String(s," ",s2); s3.println(); //-->Hello Hello, world!

{{omit from|bc|No string operations in bc}} {{omit from|dc|No string operations in dc}} [[Wikipedia::https://en.wikipedia.org/wiki/Comparison_of_programming_languages_%28string_functions%29#Concatenation]]