Search code examples
c++-cli

How to covert Textbox to integer array in c++/cli


I'm trying to convert the textbox to an integer array assuming that every character of the textbox is a digit.

//textbox is named input
int size = this->input->Text->Length;
int * num = new int[size];
int Counter = 0;

//for loop used since textbox inputs like a calculator
//Ex: the number: 234 is inputed: 2, then 23, then 234
for (int i = size; i > 0; i--)
{
    num2[Counter] = System::Convert::ToInt32(input->Text[i-1]);
    Counter += 1;
}

Array of numbers should be:

num[0] = 4, num[1] = 3, num[2] = 2 

Upon research though it seems that it's finding the integer unicode value instead.


Solution

  • Code input->Text[i-1] returns a single Unicode character value of the wchar_t type. That is implicitly cast to Int32, i.e. the symbol code.

    You have to convert the char to a string, before converting to the number. You can use the Substring method or the ToString method for this purpose.

    You can do it as follows:

    String^ text = this->input->Text;
    int size = text->Length;
    int * num = new int[size];
    
    for (int i = size - 1; i >= 0; i--) {
        num[i] = Convert::ToInt32(text->Substring(size - i - 1, 1));
    }
    

    However, you should not mix managed and unmanaged code.

    There is a better way. Use a generic collection instead of an array.

    String^ text = this->input->Text;
    int size = text->Length;
    List<int>^ nums = gcnew List<int>();
    
    for (int i = size - 1; i >= 0; i--) {
        nums->Add(Convert::ToInt32(text[i].ToString()));
    }
    

    Don't forget

    using namespace System::Collections::Generic;
    

    The list can be accessed by index like an array:

    nums[i]
    

    So it is convenient to work with. And most importantly, do not need to worry about freeing memory.