Solved

Converting a String to Int[]

Posted on 2007-11-22
10
518 Views
Last Modified: 2007-11-22
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;
        }

Open in new window

0
Comment
Question by:directxBOB
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 4
  • 2
  • 2
  • +2
10 Comments
 
LVL 7

Expert Comment

by:lucky_james
ID: 20334292
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
 
LVL 7

Expert Comment

by:lucky_james
ID: 20334304
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
 
LVL 55

Expert Comment

by:Jaime Olivares
ID: 20334310
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)
              list.Add(Convert.ToInt32(s));
    }
    return list.ToArray();
}

Open in new window

0
Salesforce Has Never Been Easier

Improve and reinforce salesforce training & adoption using WalkMe's digital adoption platform. Start saving on costly employee training by creating fast intuitive Walk-Thrus for Salesforce. Claim your Free Account Now

 
LVL 20

Expert Comment

by:REA_ANDREW
ID: 20334312
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))
                    intList.Add((Int32)Char.GetNumericValue(c));
            }
            return intList.ToArray();
        }

Open in new window

0
 
LVL 40

Accepted Solution

by:
evilrix earned 400 total points
ID: 20334314
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");
}

Open in new window

0
 
LVL 20

Assisted Solution

by:REA_ANDREW
REA_ANDREW earned 100 total points
ID: 20334318
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 Comment

by:directxBOB
ID: 20334338
char x = 9;    //Character '9' = ASCII 57
int b;

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

Expert Comment

by:REA_ANDREW
ID: 20334406
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
 
LVL 40

Expert Comment

by:evilrix
ID: 20334443
I suspect the difference is the overhead in calling Char.GetNumericValue and Char.IsDigit
0
 
LVL 20

Expert Comment

by:REA_ANDREW
ID: 20334451
true :-)

0

Featured Post

Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Extention Methods in C# 3.0 by Ivo Stoykov C# 3.0 offers extension methods. They allow extending existing classes without changing the class's source code or relying on inheritance. These are static methods invoked as instance method. This…
It was really hard time for me to get the understanding of Delegates in C#. I went through many websites and articles but I found them very clumsy. After going through those sites, I noted down the points in a easy way so here I am sharing that unde…
Finds all prime numbers in a range requested and places them in a public primes() array. I've demostrated a template size of 30 (2 * 3 * 5) but larger templates can be built such 210  (2 * 3 * 5 * 7) or 2310  (2 * 3 * 5 * 7 * 11). The larger templa…

738 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question