Solved

Converting a String to Int[]

Posted on 2007-11-22
10
517 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
  • 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
Industry Leaders: 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!

 
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

Industry Leaders: 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

Exception Handling is in the core of any application that is able to dignify its name. In this article, I'll guide you through the process of writing a DRY (Don't Repeat Yourself) Exception Handling mechanism, using Aspect Oriented Programming.
Performance in games development is paramount: every microsecond counts to be able to do everything in less than 33ms (aiming at 16ms). C# foreach statement is one of the worst performance killers, and here I explain why.
I've attached the XLSM Excel spreadsheet I used in the video and also text files containing the macros used below. https://filedb.experts-exchange.com/incoming/2017/03_w12/1151775/Permutations.txt https://filedb.experts-exchange.com/incoming/201…
Are you ready to implement Active Directory best practices without reading 300+ pages? You're in luck. In this webinar hosted by Skyport Systems, you gain insight into Microsoft's latest comprehensive guide, with tips on the best and easiest way…

763 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