• Status: Solved
• Priority: Medium
• Security: Public
• Views: 529

# Converting a String to Int[]

I have the code below, and I am having some weird behaviour when trying to convert a string to an int array. I know all values in the string are numbers and would just like to convert them into an int array so I can do some LUHN checking.

Some issues

The first digit in convert is 4
when I do:

char test = convert[i];

I get 52'4'

where 52 is the ASCII value for 4.

System.Convert.ToInt32(convert[i])

I get 52 where I am really looking for 4.

If I do:

Any ideas?
``````public static int[] ConvertString(string convert)
{
int[] digits = new int[convert.length];

for (int i = 0; i < convert.Length; i++)
{
digits[i] = System.Convert.ToInt32(convert[i]);
}

return digits;
}
``````
0
directxBOB
• 4
• 2
• 2
• +2
2 Solutions

Commented:
52'4'....
you need 4...you have got 52.
then you can find for ' and have 4.
you can you IndexOf method of string class, get this 4 in another string and can convert the new formed string to integer.
0

Commented:
seems like you want only 4 then you can use :
str.Remove(0, str.IndexOf("'')); // this would remove 52'
str.Substring(0, str.Length -1); // this would remove last '
now str would have 4 only.

hope it helps.
0

Software ArchitectCommented:
The best way is to use string.Split() method to separate elements, and a List to build the array dynamically:
``````public static int[] ConvertString(string convert)
{
string[] elems = convert.Split('\'');
List<int> list = new List<int>;

foreach (string s in elems)
{
if (s.Length > 0)
}
return list.ToArray();
}
``````
0

Commented:
I believe that this function will be better for you I have just made.  This will only add digits to an int array and not fallover if your string to convert is l9ike 123456H

Andrew
``````        static int[] ConvertString(string convert)
{
List<int> intList = new List<int>();
foreach (char c in convert)
{
if (char.IsDigit(c))
}
return intList.ToArray();
}
``````
0

Senior Software Engineer (Avast)Commented:
Subract '0' from the char returned by convert[i]
``````public static int[] ConvertString(string convert)
{
int[] digits = new int[convert.Length];

for (int i = 0; i < convert.Length; i++)
{
digits[i] = System.Convert.ToInt32(convert[i] - '0');
}

return digits;
}
static void Main(string[] args)
{
ConvertString("01234");
}
``````
0

Commented:
Oh and

Char.GetNumericValue

Solves that issue you are experiencing about the code being returned and not the actual value of the char

Andrew :-)
0

Author Commented:
char x = 9;    //Character '9' = ASCII 57
int b;

b = x - '0';   //That is '9' - '0' = 57 - 48 = 9
0

Commented:
Bit of useless info but comparing both my function and that of evilrix , which both work I might point out, BUT

I am surprised to see that evilrix's function is on average 3.9 milliseconds faster than mine.

foreach loops just have performance hits everywhere lol
0

Senior Software Engineer (Avast)Commented:
I suspect the difference is the overhead in calling Char.GetNumericValue and Char.IsDigit
0

Commented:
true :-)

0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.