On Wednesday, August 17, 2016 at 5:52:47 PM UTC, Rishabh Raghunath wrote: > > I am a beginner in Julia and I am more familiar with the C language.. >
> I am actually learning Julia for use in a programming contest and love the > experience so far.. > There are often questions that require you to manipulate the characters > comprising the string. Its easy to do in C as strings are nothing but an > array of Characters > A lot is not as easy as you might think :) I haven't looked up C recently, but at least C++14 has now 4 char literals (and 5 string), and C++17 added the 5th "utf8" literal that is bizzare as it only supports ASCII.. Things used to be simple with fixed-sized length ASCII and EBCDIC <http://www.ibm.com/support/knowledgecenter/SS2MB5_14.1.0/com.ibm.xlf141.bg.doc/language_ref/asciit.html>, with the latter still holding back C++ (or you might be optimisitc and say it makes C++ more portable..). Unicode, and e.g. grapheme clusters, made strings of letters ("Char"s, not just meaning bytes) a can-of-worm.. Having said that.. I was thinking up a new mutable string type.. (seems Julia developers are too with at least similar ideas). -- Palli. > > On Wed, Aug 17, 2016 at 10:48 PM, ggggg <galen...@gmail.com <javascript:>> > wrote: > >> Isn't it a red herring to say that strings lack setindex because they are >> immutable? I think strings don't have setindex! because it is considered to >> be a bad API choice, at least partially because you can't do O(1) indexing >> for many string encodings. >> >> I can easily define a setindex! method* that does what the OP is >> expecting, so how can this be related to strings being immutable? >> >> *julia> **Base.setindex!(s::ASCIIString, v,i) = s.data[i]=v* >> >> *setindex! (generic function with 58 methods)* >> >> *julia> **a="abc"* >> >> *"abc"* >> >> *julia> **a[1]='7';a* >> >> *"7bc"* >> >> *julia> **a[1]+=1;a* >> >> *"8bc"* >> >> *This works in 0.4, and I'm lead to believe this is considered a bad idea. >> >> On Wednesday, August 17, 2016 at 12:40:36 AM UTC-6, Jacob Quinn wrote: >>> >>> Strings are immutable (similar to other languages). There are several >>> different ways to get what you want, but I tend to utilize IOBuffer a lot: >>> >>> a = "abcd" >>> io = IOBuffer() >>> >>> for char in a >>> write(io, a + 1) >>> end >>> >>> println(takebuf_string(io)) >>> >>> -Jacob >>> >>> On Wed, Aug 17, 2016 at 12:30 AM, Rishabh Raghunath <rishi9...@gmail.com >>> > wrote: >>> >>>> >>>> Hello fellow Julia Users!! >>>> >>>> How do you manipulate the individual characters comprising a string in >>>> Julia using a for loop ? >>>> For example: >>>> ################### >>>> >>>> a = "abcd" >>>> >>>> for i in length(a) >>>> a[i]+=1 >>>> end >>>> >>>> print(a) >>>> >>>> #################### >>>> I am expecting to get my EXPECTED OUTPUT as " bcde " >>>> >>>> BUT I get the following error: >>>> ########################################## >>>> >>>> ERROR: MethodError: `setindex!` has no method matching >>>> setindex!(::ASCIIString, ::Char, ::Int64) >>>> [inlined code] from ./none:2 >>>> in anonymous at ./no file:4294967295 >>>> >>>> ########################################## >>>> I also tried using: >>>> >>>> for i in eachindex(a) instead of the for loop in the above program .. >>>> And I get the same error.. >>>> >>>> Please tell me what i should do to get my desired output .. >>>> Please respond ASAP.. >>>> Thanks.. >>>> >>> >>> >