# Inserting in a string

**URL:** <https://forum.elixirforum.com/t/inserting-in-a-string/3511>\
**Category:** Questions\
**Created:** [February 2, 2017, 7:09pm UTC](https://forum.elixirforum.com/t/inserting-in-a-string/3511 "2017-02-02T19:09:05Z")\
**Posts on this page:** 1\
**Showing post:** 3

<div class="post-metadata">

**Author:** ![mgwidmann](https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/mgwidmann/32/7249_2.png) [@mgwidmann](https://forum.elixirforum.com/u/mgwidmann)\
**Post date:** [February 2, 2017, 7:20pm UTC](https://forum.elixirforum.com/t/inserting-in-a-string/3511/3 "2017-02-02T19:20:54Z")

</div>

I think you’ll need to change your accumulator in your reduce (and possibly even write the reduce without `Enum.reduce/2`). You’ll want to know what the next character is so you know if you need to insert a space or not. Additionally, using a regular expression to check if it is an uppercase is not very performant. I think you’d be better off doing `x == String.upcase(x)` to check that.

Secondly, your bug which changes everything from letters to numbers is caused by two things. First `String.to_charlist/1` returns a list of integers, not binaries (strings). If you want to reduce a string, you should do `String.codepoints/1`, which will give you a list of strings of a single character (including unicode). Your error comes in when you take an integer like `?a` which is 97, and do `to_string(97)`, which produces `"97"`, not `"a"`. This won’t be a problem if you use `String.codepoints/1` like I mentioned above.

---

_[View the full topic](https://forum.elixirforum.com/t/inserting-in-a-string/3511)._
