Solved

Converting a String to Int[]

Posted on 2007-11-22
10
513 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
Comment Utility
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
Comment Utility
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
Comment Utility
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
 
LVL 20

Expert Comment

by:REA_ANDREW
Comment Utility
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
Comment Utility
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
How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

 
LVL 20

Assisted Solution

by:REA_ANDREW
REA_ANDREW earned 100 total points
Comment Utility
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
Comment Utility
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
Comment Utility
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
Comment Utility
I suspect the difference is the overhead in calling Char.GetNumericValue and Char.IsDigit
0
 
LVL 20

Expert Comment

by:REA_ANDREW
Comment Utility
true :-)

0

Featured Post

Why You Should Analyze Threat Actor TTPs

After years of analyzing threat actor behavior, it’s become clear that at any given time there are specific tactics, techniques, and procedures (TTPs) that are particularly prevalent. By analyzing and understanding these TTPs, you can dramatically enhance your security program.

Join & Write a Comment

This article introduced a TextBox that supports transparent background.   Introduction TextBox is the most widely used control component in GUI design. Most GUI controls do not support transparent background and more or less do not have the…
We all know that functional code is the leg that any good program stands on when it comes right down to it, however, if your program lacks a good user interface your product may not have the appeal needed to keep your customers happy. This issue can…
Excel styles will make formatting consistent and let you apply and change formatting faster. In this tutorial, you'll learn how to use Excel's built-in styles, how to modify styles, and how to create your own. You'll also learn how to use your custo…
Access reports are powerful and flexible. Learn how to create a query and then a grouped report using the wizard. Modify the report design after the wizard is done to make it look better. There will be another video to explain how to put the final p…

744 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

Need Help in Real-Time?

Connect with top rated Experts

12 Experts available now in Live!

Get 1:1 Help Now