Binary strings: Difference between revisions
Content added Content deleted
Puppydrum64 (talk | contribs) m (→Compare two strings: formatting) |
m (→{{header|Phix}}: added syntax colouring, marked p2js compatible) |
||
Line 2,821: | Line 2,821: | ||
Strings are reference counted, and mutable with copy-on-write semantics. Memory is managed automatically and very efficiently, strings can easily be a billion characters long (on 32-bit, the precise limit is in fact 1,610,612,711 characters, available memory and performance impacts aside) and have a null terminator for C compatibility, but can contain embedded nulls as well. |
Strings are reference counted, and mutable with copy-on-write semantics. Memory is managed automatically and very efficiently, strings can easily be a billion characters long (on 32-bit, the precise limit is in fact 1,610,612,711 characters, available memory and performance impacts aside) and have a null terminator for C compatibility, but can contain embedded nulls as well. |
||
Note that attempting to set an element (character/byte) to a value outside the range 0..255 will result in automatic expansion to dword-(or qword-)sequence, and can result in a run-time type check. |
Note that attempting to set an element (character/byte) to a value outside the range 0..255 will result in automatic expansion to dword-(or qword-)sequence, and can result in a run-time type check. |
||
<lang Phix> |
<!--<lang Phix>(phixonline)--> |
||
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span> |
|||
s = x"ef bb bf" -- explicit binary string (the utf8 BOM) |
|||
<span style="color: #004080;">string</span> <span style="color: #000000;">s</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">"abc"</span> |
|||
s[2] = 0 |
|||
<span style="color: #000000;">s</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">x"ef bb bf"</span> <span style="color: #000080;font-style:italic;">-- explicit binary string (the utf8 BOM)</span> |
|||
s[3] = 'z' |
|||
<span style="color: #000000;">s</span><span style="color: #0000FF;">[</span><span style="color: #000000;">2</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">0</span> |
|||
if s="\#EF\0z" then puts(1,"ok\n") end if |
|||
<span style="color: #000000;">s</span><span style="color: #0000FF;">[</span><span style="color: #000000;">3</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">'z'</span> |
|||
string t = s |
|||
<span style="color: #008080;">if</span> <span style="color: #000000;">s</span><span style="color: #0000FF;">=</span><span style="color: #008000;">"\#EF\0z"</span> <span style="color: #008080;">then</span> <span style="color: #7060A8;">puts</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"ok\n"</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span> |
|||
t[1..2] = "xy" -- s remains unaltered |
|||
<span style="color: #004080;">string</span> <span style="color: #000000;">t</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">s</span> |
|||
?t -- "xyz" |
|||
<span style="color: #000000;">t</span><span style="color: #0000FF;">[</span><span style="color: #000000;">1</span><span style="color: #0000FF;">..</span><span style="color: #000000;">2</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">"xy"</span> <span style="color: #000080;font-style:italic;">-- s remains unaltered</span> |
|||
t = "food" ?t |
|||
<span style="color: #0000FF;">?</span><span style="color: #000000;">t</span> <span style="color: #000080;font-style:italic;">-- "xyz"</span> |
|||
t[2..3] = 'e' ?t -- "feed" |
|||
<span style="color: #000000;">t</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">"food"</span> <span style="color: #0000FF;">?</span><span style="color: #000000;">t</span> |
|||
t[3..2] = "ast" ?t -- "feasted" |
|||
<span style="color: #000000;">t</span><span style="color: #0000FF;">[</span><span style="color: #000000;">2</span><span style="color: #0000FF;">..</span><span style="color: #000000;">3</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">'e'</span> <span style="color: #0000FF;">?</span><span style="color: #000000;">t</span> <span style="color: #000080;font-style:italic;">-- "feed"</span> |
|||
t[3..-2] = "" ?t -- "fed" |
|||
<span style="color: #000000;">t</span><span style="color: #0000FF;">[</span><span style="color: #000000;">3</span><span style="color: #0000FF;">..</span><span style="color: #000000;">2</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">"ast"</span> <span style="color: #0000FF;">?</span><span style="color: #000000;">t</span> <span style="color: #000080;font-style:italic;">-- "feasted"</span> |
|||
if length(t)=0 then puts(1,"t is empty\n") end if |
|||
<span style="color: #000000;">t</span><span style="color: #0000FF;">[</span><span style="color: #000000;">3</span><span style="color: #0000FF;">..-</span><span style="color: #000000;">2</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">""</span> <span style="color: #0000FF;">?</span><span style="color: #000000;">t</span> <span style="color: #000080;font-style:italic;">-- "fed"</span> |
|||
if t!="" then puts(1,"t is not empty\n") end if |
|||
<span style="color: #008080;">if</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">t</span><span style="color: #0000FF;">)=</span><span style="color: #000000;">0</span> <span style="color: #008080;">then</span> <span style="color: #7060A8;">puts</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"t is empty\n"</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span> |
|||
t = "be" |
|||
<span style="color: #008080;">if</span> <span style="color: #000000;">t</span><span style="color: #0000FF;">!=</span><span style="color: #008000;">""</span> <span style="color: #008080;">then</span> <span style="color: #7060A8;">puts</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"t is not empty\n"</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span> |
|||
t &= 't' ?t -- bet |
|||
<span style="color: #000000;">t</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">"be"</span> |
|||
t = 'a'&t ?t -- abet |
|||
<span style="color: #000000;">t</span> <span style="color: #0000FF;">&=</span> <span style="color: #008000;">'t'</span> <span style="color: #0000FF;">?</span><span style="color: #000000;">t</span> <span style="color: #000080;font-style:italic;">-- bet</span> |
|||
?t[2..3] -- be |
|||
<span style="color: #000000;">t</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">'a'</span><span style="color: #0000FF;">&</span><span style="color: #000000;">t</span> <span style="color: #0000FF;">?</span><span style="color: #000000;">t</span> <span style="color: #000080;font-style:italic;">-- abet</span> |
|||
?substitute(t,"be","bbo") -- abbot |
|||
<span style="color: #0000FF;">?</span><span style="color: #000000;">t</span><span style="color: #0000FF;">[</span><span style="color: #000000;">2</span><span style="color: #0000FF;">..</span><span style="color: #000000;">3</span><span style="color: #0000FF;">]</span> <span style="color: #000080;font-style:italic;">-- be</span> |
|||
?substitute(t,"be","dep") -- adept |
|||
<span style="color: #0000FF;">?</span><span style="color: #7060A8;">substitute</span><span style="color: #0000FF;">(</span><span style="color: #000000;">t</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"be"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"bbo"</span><span style="color: #0000FF;">)</span> <span style="color: #000080;font-style:italic;">-- abbot</span> |
|||
t = substitute(t,"be","dep") -- to actually modify t |
|||
<span style="color: #0000FF;">?</span><span style="color: #7060A8;">substitute</span><span style="color: #0000FF;">(</span><span style="color: #000000;">t</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"be"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"dep"</span><span style="color: #0000FF;">)</span> <span style="color: #000080;font-style:italic;">-- adept</span> |
|||
?join({"abc","def","ghi"}) -- "abc def ghi" |
|||
<span style="color: #000000;">t</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">substitute</span><span style="color: #0000FF;">(</span><span style="color: #000000;">t</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"be"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"dep"</span><span style="color: #0000FF;">)</span> <span style="color: #000080;font-style:italic;">-- to actually modify t</span> |
|||
?join({"abc","def","ghi"},"") -- "abcdefghi" |
|||
<span style="color: #0000FF;">?</span><span style="color: #7060A8;">join</span><span style="color: #0000FF;">({</span><span style="color: #008000;">"abc"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"def"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"ghi"</span><span style="color: #0000FF;">})</span> <span style="color: #000080;font-style:italic;">-- "abc def ghi"</span> |
|||
?join({"abc","def","ghi"},"\n") -- "abc\ndef\nghi"</lang> |
|||
<span style="color: #0000FF;">?</span><span style="color: #7060A8;">join</span><span style="color: #0000FF;">({</span><span style="color: #008000;">"abc"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"def"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"ghi"</span><span style="color: #0000FF;">},</span><span style="color: #008000;">""</span><span style="color: #0000FF;">)</span> <span style="color: #000080;font-style:italic;">-- "abcdefghi"</span> |
|||
<span style="color: #0000FF;">?</span><span style="color: #7060A8;">join</span><span style="color: #0000FF;">({</span><span style="color: #008000;">"abc"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"def"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"ghi"</span><span style="color: #0000FF;">},</span><span style="color: #008000;">"\n"</span><span style="color: #0000FF;">)</span> <span style="color: #000080;font-style:italic;">-- "abc\ndef\nghi"</span> |
|||
<!--</lang>--> |
|||
{{out}} |
{{out}} |
||
<pre> |
<pre> |