Problemi con l'uso di IndexOfAny

di il
9 risposte

Problemi con l'uso di IndexOfAny

Buonasera.

Ho questo elementare codice, che però non risponde come mi attenderei.

Sono io oppure è la funzione che dà problemi?

       'in questa fase andremo prima a effettuare le operazioni comprese nelle parentesi
       '1)verifichiamo quali operatori sono presenti nelle parentesi
       Dim crt() As Char = {"+"c, "-"c, "*"c, "/"c}
       TextBox1.Text = "(3+5*4-2)"
       for j=0 to textbox1.text.lenght
       		Dim indice As Integer = TextBox1.Text.IndexOfAny(crt,j)
       		Select Case indice
           		Case 0
               		Stop
           		Case 1
               		Stop
           		Case 2
               		Stop
           		Case 3
               		Stop
       		End Select
       next x
       
       Indice è sempre uguale a 3 ("/").
       
       Se textbox1.text è : "questa è un* prova" mi restituisce correttamente 11. 
       Grazie.

9 Risposte

  • Re: Problemi con l'uso di IndexOfAny

    11/05/2024 - Jan ha scritto:


    Sono io oppure è la funzione che dà problemi?

    Non è ben chiaro cosa vuoi fare, ma non è senz'altro colpa della funzione. :)

    La funzione IndexOfAny() ti restituisce - come dice il nome stesso - la posizione della prima occorrenza dei caratteri che specifichi come parametro, cercandoli all'intero della stringa di partenza: a che serve quel ciclo For?

    Leggi come funziona IndexOfAny() e guarda anche gli esempi.

  • Re: Problemi con l'uso di IndexOfAny

    Quindi case 11 stop non l'hai previsto…

    Se metti come testo “12345+12345-12345*12345/12345” cosa succede?

    Cosa ti aspetti che succeda?

  • Re: Problemi con l'uso di IndexOfAny

    11/05/2024 - Alka ha scritto:


    La funzione IndexOfAny() ti restituisce - come dice il nome stesso - la posizione della prima occorrenza dei caratteri che specifichi come parametro, cercandoli all'intero della stringa di partenza: a che serve quel ciclo For?

    Grazie,Alka.

    Nella stringa textbox1.text cerco la presenza di questi caratteri :{"+"c, "-"c, "*"c, "/"c} ed il ciclo lo utilizzo per scorrere tutta la stringa (esempio : (4*5+3/2). In base all'esito, effettuo le operazioni del caso. Ma questo viene dopo…

  • Re: Problemi con l'uso di IndexOfAny

    11/05/2024 - sihsandrea ha scritto:


    Se metti come testo “12345+12345-12345*12345/12345” cosa succede?

    Cosa ti aspetti che succeda?

    Grazie anche a te,sihsandrea.

    Mi aspetto, eseguendo il ciclo for, mi restituisca al primo passaggio 5, al secondo 11,eccetera.

    Sbaglio?

  • Re: Problemi con l'uso di IndexOfAny

    11/05/2024 - Jan ha scritto:


    11/05/2024 - Alka ha scritto:


    La funzione IndexOfAny() ti restituisce - come dice il nome stesso - la posizione della prima occorrenza dei caratteri che specifichi come parametro, cercandoli all'intero della stringa di partenza: a che serve quel ciclo For?

    Grazie,Alka.

    Nella stringa textbox1.text cerco la presenza di questi caratteri :{"+"c, "-"c, "*"c, "/"c} ed il ciclo lo utilizzo per scorrere tutta la stringa (esempio : (4*5+3/2). In base all'esito, effettuo le operazioni del caso. Ma questo viene dopo…

    Piuttosto che implementare  j dovresti implementare l'indice dell'array dei char per sapere le posizioni degli operatori matematici. La stringa non la devi scorrere, ci pensa indexofany a scorrerla.

  • Re: Problemi con l'uso di IndexOfAny

    11/05/2024 - Jan ha scritto:


    Mi aspetto, eseguendo il ciclo for, mi restituisca al primo passaggio 5, al secondo 11,eccetera.

    Non “aspettarti”: fai il debug passo per passo e scopri come si comporta il programma, che valore assumono le variabili, ecc.

    Inoltre - ripeto - hai letto come funziona IndexOfAny()?
    In particolare, hai capito a cosa serve il secondo parametro che specifichi, ossia startIndex?

    Piccolo suggerimento: è l'indice del primo carattere da cui inizia la ricerca nella stringa dei caratteri che hai specificato.
    Detto questo, quindi, se il primo carattere che ti interessa è in posizione 3, e tu fai un ciclo partendo prima dalla posizione 0, poi dalla 1, poi dalla 2, e il primo carattere è sempre in posizione 3, ogni volta che parti da 0, da 1, da 2, perché non dovrebbe restituirti sempre 3?

    Rileggi la documentazione e gli esempi, metti un breakpoint all'interno del ciclo sulla riga di IndexOfAny(), quando il programma si ferma guarda le variabili e ripeti a voce alta quello che ti aspetti che faccia il codice, e poi verifica che il codice faccia esattamente quello.

  • Re: Problemi con l'uso di IndexOfAny

    Non serve il debug… togli quella j dalla funzione e metti solo 0 al suo posto..

    J usalo nell'array dei caratteri in modo che prima cerca + poi - poi * infine /

    Il ciclo for rispecchia il nr elementi dell'array [4]

    E fai sparire quei case….

  • Re: Problemi con l'uso di IndexOfAny

    11/05/2024 - sihsandrea ha scritto:


    Piuttosto che implementare  j dovresti implementare l'indice dell'array dei char per sapere le posizioni degli operatori matematici. La stringa non la devi scorrere, ci pensa indexofany a scorrerla.

    Grazie a te ed ad Alka ho finalmente capito indexofany!

    Grazie ancora.

  • Re: Problemi con l'uso di IndexOfAny

    Jan hai letto la documentazione?

    https://learn.microsoft.com/it-it/dotnet/api/system.string.indexofany?view=net-8.0

    Mi sembra chiara

Devi accedere o registrarti per scrivere nel forum
9 risposte