[c#] Pobieranie podłańcuchów


(eureka 170) #1

Witam, mam następujący program:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;


namespace WindowsFormsApplication4

{

    public partial class Form1 : Form

    {

        string ciag;

        int indeks = 0;

        int f=0,g=0;

        int h = 0;

        bool flaga = true;

        int dlugosc;

        public Form1()

        {

            InitializeComponent();

        }


        private void button1_Click(object sender, EventArgs e)

        {

            ciag = textBox1.Text;

            dlugosc = ciag.Length;


            for (int i = 0; i < dlugosc; i++)

            {

                if (ciag[i] == '(')

                {

                    f = i;

                }

                if (ciag[i] == ')')

                {

                    g = i;

                    flaga = false;

                }

                if (flaga == false)

                {

                    h++;

                    flaga = true;

                }

            }


            string[] tab = new string[h];

            h = 0;


            for (int i = 0; i < dlugosc; i++)

            {

                if (ciag[i] == '(')

                {

                    f = i;

                }

                if (ciag[i] == ')')

                {

                    g = i;

                    flaga = false;

                }

                if (flaga == false)

                {


                    flaga = true;

                    tab[h] = ciag.Substring(f+1, g-1);

                    h++;

                }


            }

            label1.Text = tab[1];

        }

    }

}

Chciałbym, żeby po wpisaniu w polu (2+3)*(3+4)*(4+5), skopiowało mi do tablicy tab[0] = "2+3", tab[1] = "3+4", tab[2] = "4+5".

Jednak po kompilacji mam komunikat od Visual Studio: "An unhandled exception of type 'System.ArgumentOutOfRangeException' occurred in mscorlib.dll

Additional information: Indeks i długość muszą odwoływać się do lokalizacji w ciągu."

Czemu tak się dzieje?


(Grzelix) #2

Problem masz w tej linijce

tab[h] = ciag.Substring(f + 1, g - 1);

co możesz sprawdzić debugując program . błąd polega na tym że funkcja Substring potrzebuje dwa arguenty początek podciągu i jego długość. ty zaś podajesz poczatek i koniec podciągu (tak na marginesie w javie funkcja substring pobiera takie parametry) poprawka w kodzie wygląda tak:

tab[h] = ciag.Substring(f + 1, g-f - 1);

(eureka 170) #3

Dzięki grzelix, teraz już działa