Prev: Creating a hybrid cell
Next: size of ticks
From: ebaugh on 5 Apr 2010 08:00 Thank you so much to everybody who helped my with my question. I have posted all the solutions that I received in this message so that they can be available to the whole group. The author of each solution is noted. Jason Ebaugh ***ORIGINAL QUESTION*** How could I go from: {h,e,l,l,o} to {hello}? That is the first step of what I am really looking to do. Which is to go from: {{t,h,i,s},{i,s},{a},{t,e,s,t},{m,e,s,s,a,g,e}} to "this is a test message" ***MATH GROUP SOLUTIONS*** Harvey P. Dale: StringJoin@@ToString/@Flatten[Riffle[{{t,h,i,s},{i,s},{a},{t,e,s,t},{ m,e ,s,s,a,g,e}}," "]] Bob Hanlon: StringJoin @@ {"h", "e", "l", "l", "o"} hello expr = Map[ ToString, {{t, h, i, s}, {i, s}, {a}, {t, e, s, t}, {m, e, s, s, a, g, e}}, {2}]; StringJoin @@ Most[Flatten[ Append[#, " "] & /@ expr]] this is a test message Dr. S. S. Tong: StringJoin[{"h", "e", "l", "l", "o"}] StringJoin @@ Riffle[{{"t", "h", "i", "s"}, {"i", "s"}, {"a"}, {"t", "e", "s", "t"}, {"m", "e", "s", "s", "a", "g", "e"}}, " "] Tomas Garza: In[1]:= StringJoin[{"h", "e", "l", "l", "o"}] Out[1]= "hello" Do the same for {"This", " ", "is", " ", "a", " ", "test", " ", "message"}, but remember to type the spaces between each word. In[2]:= StringJoin[{"This", " ", "is", " ", "a", " ", "test", " ", "message"}] Out[2]= "This is a test message" Murray Eisenberg: StringJoin[{"t", "h", "i", "s"}] this Next, you have your list of lists: lis = {{"t", "h", "i", "s"}, {"i", "s"}, {"a"}, {"t", "e", "s", "t"}}; (I left out the last word.) So Map the function StringJoin onto that at level 1: Map[StringJoin, lis, 1] {"this", "is", "a", "test"} Now you need to append a blank to each word (except the last). For a single string str StringInsert[str," ",-1] does it, as in: trial=StringInsert["this"," ",-1] this (* you can't see the trailing blank here, so... *) StringLength[trial] 5 (You could also use StringJoin instead of StringInsert.) Now Map that function of appending a blank onto the list of words: appended = Map[StringInsert[#, " ", -1] &, words] {this ,is ,a ,test } Same thing, abbreviated: StringInsert[#, " ", -1] & /@ words Finally, join all the individual (blank-trailed) words into a single string and delete the final trailing blank: StringTrim(a)StringJoin[appended] Obviously, all those steps could be combined, encapsulated into a single function: sentenceFromLetters[lis_] := StringTrim@ StringJoin[StringInsert[#, " ", -1] & /@ Map[StringJoin, lis, 1] Hans Michel: In[16]:= phrase = {{"t","h","i","s"},{"i","s"},{"a"},{"t","e","s","t"},{"m","e","s","s","a ","g","e"}} Out[16]= {{t,h,i,s},{i,s},{a},{t,e,s,t},{m,e,s,s,a,g,e}} In[17]:= StringJoin[Flatten[Riffle[phrase," "],Infinity]] Out[17]= this is a test message Leonid Shifrin : In[1]:= List@ ToExpression[StringJoin @@ Map[ToString, {h, e, l, l, o}]] Out[1]= {hello} The following is one way to accomplish what you mentioned as your final goal: Clear[convertToString]; convertToString[expr_] := expr //. { symbs : {__Symbol} :> StringJoin @@ Map[ToString, symbs], words : {__String} :> StringJoin @@ Riffle[words, " "]}; In[4]:= convertToString[{h, e, l, l, o}] Out[4]= "hello" In[5]:= convertToString[{{t, h, i, s}, {i, s}, {a}, {t, e, s, t}, {m, e, s, s, a, g, e}}] Out[5]= "this is a test message" Samuel Thomas Blake In[14]:= StringJoin @@ ToString /@ Flatten[Riffle[{{t, h, i, s}, {i, s}, {a}, {t, e, s, t}, {m, e, s, s, a, g, e}}, " "]] Out[14]= "this is a test message"
|
Pages: 1 Prev: Creating a hybrid cell Next: size of ticks |