Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    79

    [C#] Esaminare caratteri in una stringa

    Ciao ragazzi ho un problemino con un esercizio riguardante le stringhe.
    In pratica ho una stringa lunga n e dovrei controllare se un carattere c è presente all'interno della stringa. Il problema è che riesco a controllare solamente il primo carattere della stringa con il metodo IndexOf e l'ultimo con LastIndexOf... come faccio per controllare tutti gli n caratteri della stringa??

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480

    Re: [C#] Esaminare caratteri in una stringa

    Originariamente inviato da HeroGian
    ... se un carattere c è presente all'interno della stringa ...
    Metodo Contains
    http://msdn.microsoft.com/it-it/library/dy85x1sa(v=vs.80).aspx
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,465

    Re: [C#] Esaminare caratteri in una stringa

    Originariamente inviato da HeroGian
    Ciao ragazzi ho un problemino con un esercizio riguardante le stringhe.
    In pratica ho una stringa lunga n e dovrei controllare se un carattere c è presente all'interno della stringa. Il problema è che riesco a controllare solamente il primo carattere della stringa con il metodo IndexOf e l'ultimo con LastIndexOf... come faccio per controllare tutti gli n caratteri della stringa??
    Il metodo IndexOf di permette di controllarli tutti: se non ricordo male, tra i parametri accetta anche la posizione di partenza.

    La stringa ha comunque la proprietà Chars che potrebbe essere utilizzata allo scopo.

    In breve, studia la documentazione del tipo String e vedrai che troverai tutto quello che ti serve.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    79

    Re: Re: [C#] Esaminare caratteri in una stringa

    Originariamente inviato da oregon
    Metodo Contains
    http://msdn.microsoft.com/it-it/library/dy85x1sa(v=vs.80).aspx
    però non mi restituisce l'indice in cui il carattere è inserito, mi da solamente un booleano giusto?
    perchè io dovrei controllare una stringa inserita da un utente e stampare a video un trattino se il carattere non è presente o una X se è presente..
    Quindi mi chiedevo se si potesse fare una cosa del genere:


    //stringa inserita dall'utente
    //carattere da controllare inserito dall'utente

    int c=0;
    for(int k=0; k < stringa.Length; k++)
    {
    if (stringa.IndexOf(letteraUtente,c)<0) //parte a controllare se il carattere è presente da c
    Console.Write("_"); //carattere non presente

    else
    Console.Write("X");//carattere presente
    Console.Write(" "); //crea spazio dopo ogni simbolo

    c++; //passa al carattere successivo
    }
    Il problema del codice che ho scritto è che non tiene in considerazione cio che sta in mezzo ai caratteri, ad esempio se la stringa da controllare è la parola "gatto" ed il carattere da controllare è 't' mi stampa:

    XXXX_

    ad esempio se deve controllare la t in automobile mi stampa:

    XXX_ _ _ _ _ _ _

    spero di aver spiegato bene il mio problema xD

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480

    Re: Re: Re: [C#] Esaminare caratteri in una stringa

    Originariamente inviato da HeroGian
    però non mi restituisce l'indice in cui il carattere è inserito
    Non lo avevi chiesto ...

    La tua richiesta era

    ... se un carattere c è presente all'interno della stringa ...
    Nel tuo codice, comunque, non te ne fai niente dell'indice ma controlli solo se è contenuto.

    In ogni caso, accedi ai singoli caratteri come ti ha suggerito alka

    codice:
        for (int i = 0; i < stringa.Length; i++)
                Console.WriteLine(stringa[i]);
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2012
    Messaggi
    79
    ok, chiedo scusa se la mia domanda è risultata un po ambigua all'inizio...
    Comunque ho provato a farlo col metodo IndexOf, come alka mi ha gentilmente indicato.
    Ma purtroppo non riesco a capire come mai non mi stampa la X solamente nell'indice in cui è presente, vi sarei grato se riusciste a dirmi il perchè... chiedo scusa per le tante domande...

  7. #7
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    ciao

    Spero che gli esperti , non mi scrideranno , dicento ma secondo te noi non riuscivavo a
    fare un esempio "è gia capitato " , è la voglia di un principiante di partecipare
    dove può essere di aiuto , spero capiate


    Come ti ha detto oregon , puoi leggere il singolo carattere di una stringa , che in
    c sharp sono array ma di sola lettura .
    quindi se fai stringa[0] leggi il primo carattere se stringa[1] il secondo ecc...

    poi confronti il carattere della stringa col carattere di confronto .

    codice:
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                string stringa = "stringa da controllare";
                 char letteraUtente = 'c';
                for (int k = 0; k < stringa.Length; k++)
                {
                    if (stringa[k]!= letteraUtente ) //parte a controllare se il carattere è presente da c
                        Console.Write("_"); //carattere non presente
    
                    else
                        Console.Write("X");//carattere presente
                    Console.Write(" "); //crea spazio dopo ogni simbolo
    
                    
                }
    
                Console.ReadLine();
    
    
            }
        }
    }
    P.S .
    con indexof non puoi fare quello che vorresti perche ti restituisce la posizione del
    carattere , se il carattere è in posizione 8 ,parti da 0 ti restituisce 8 ,partida 1 8 , da 2 8
    quando raggiungi la posizione 8 ti restituisce -1 perche non lo trova piu .

    alka ti ha suggerito indexof perche tu avevi posto una richiesta diversa trovare il carattere
    non gestire carettere per carattere.
    Tecnologia

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da HeroGian
    Comunque ho provato a farlo col metodo IndexOf, come alka mi ha gentilmente indicato.
    Ma perché l'IndexOf?

    Ti avevo suggerito l'accesso alla stringa con

    stringa[i]
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,465
    Originariamente inviato da HeroGian
    Comunque ho provato a farlo col metodo IndexOf, come alka mi ha gentilmente indicato.
    Io ti ho elencato metodi e proprietà da approfondire per capire come funzionano e come utilizzarli per raggiungere lo scopo: non ti ho forzato a usarli.

    Originariamente inviato da HeroGian
    Ma purtroppo non riesco a capire come mai non mi stampa la X solamente nell'indice in cui è presente, vi sarei grato se riusciste a dirmi il perchè... chiedo scusa per le tante domande...
    Senza vedere il codice aggiornato, è ben difficile dirti dove sbagli.

    Io comunque non ho ancora capito cosa deve fare di preciso il tuo programma.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  10. #10
    Utente di HTML.it L'avatar di U235
    Registrato dal
    Mar 2006
    Messaggi
    1,536
    Originariamente inviato da HeroGian
    ok, chiedo scusa se la mia domanda è risultata un po ambigua all'inizio...
    Comunque ho provato a farlo col metodo IndexOf, come alka mi ha gentilmente indicato.
    Ma purtroppo non riesco a capire come mai non mi stampa la X solamente nell'indice in cui è presente, vi sarei grato se riusciste a dirmi il perchè... chiedo scusa per le tante domande...
    Ciao,
    allora... il metodo "IndexOf(stringaDaControllare,indiceDiInizioRicerc a)" ti restituisce un intero che corrisponde alla prima occorrenza trova, e questo mi pare tu lo abbia capito. Quindi se tu fai il ciclo incrementando c mentre scorri i caratteri della stringa, fintanto che "c" è minore o uguale all'indice della prima occorrenza trovata, il risultato della condizione sarà sempre false perchè restituirà l'indice della prima occorrenza (>-1 quindi <0 = false). Quindi ricapitolando, se :

    stringa = "automobile"
    letteraUtente= "t"

    vadiamo cosa avviene durante il ciclo (utilizzando i numeri al posto di "c") :

    stringa.IndexOf(letteraUtente,0) = 2 (la prima occorrenza di "t" (dal carattere 0) è in posizione 2)
    stringa.IndexOf(letteraUtente,1) = 2 (la prima occorrenza di "t" (dal carattere 1) è in posizione 2)
    stringa.IndexOf(letteraUtente,2) = 2 (la prima occorrenza di "t" (dal carattere 2) è in posizione 2)

    fino a qui hai ottenuto false alla condizione <0, quindi stampa x, ma attenzione, qui cambia :
    stringa.IndexOf(letteraUtente,3) = -1 perchè dopo il carattere 2 (0 incluso, quindi dopo il terzo carattere) non esistono "t", quindi il metodo IndexOf non ha più nessun indice da restituire, idem per le successive (di conseguenza restituisce true la condizione <0 e stamperà _)

    quindi il risultato è XXX_ _ _ _ _ _ _

    se invece avessi una situazione del genere :

    stringa = "automobile t"
    letteraUtente= "t"

    il ciclo sarà :

    stringa.IndexOf(letteraUtente,0) = 2 (la prima occorrenza di "t" (dal carattere 0) è in posizione 2)
    stringa.IndexOf(letteraUtente,1) = 2 (la prima occorrenza di "t" (dal carattere 1) è in posizione 2)
    stringa.IndexOf(letteraUtente,2) = 2 (la prima occorrenza di "t" (dal carattere 2) è in posizione 2)

    attenzione, qui cambia solo l'indice, ma nella condizione risulterà sempre false a <0:

    stringa.IndexOf(letteraUtente,3) = 11 perchè la prima occorrenza dal carattere 3 si trova in posizione 11, quindi IndexOf ti restituirebbe fino alla fina della stringa 11 (quindi sempre false se la condizione è <0)
    di conseguenza saranno tutte x. gatto sarebbe XXXX_ e via dicendo.

    spero di aver risposto alla tua domanda citata.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.