Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18

Discussione: [C++] Stringhe

  1. #1

    [C++] Stringhe

    Ciao a tutti...

    Ho un "lapsus" :

    ho una stringa di caratteri char[]="ciao"; come faccio con un ciclo while a scorrere tutta la stringa testando carattere per carattere fino al fine stringa?

    Altra domanda se io avessi una stringa del tipo
    AnsiString origine; (valorizzata tramite un Edit (VC++))

    come faccio a fare la stessa cosa?

    RISPONDETEMI PER FAVORE!!!
    GREAZIE A TUTTI
    CIAO

  2. #2

    Re: [C++] Stringhe

    Originariamente inviato da NeoArgo

    ho una stringa di caratteri char[]="ciao"; come faccio con un ciclo while a scorrere tutta la stringa testando carattere per carattere fino al fine stringa?
    codice:
    int n = strlen(stringa);
    char c;
    for(int i=0; i<n; i++) {
        c = stringa[i];
    }
    oppure col while:

    codice:
    int n = strlen(stringa);
    int i = 0;
    char c;
    while(i < n) {
        c = stringa[i];
        i++;
    }
    Altra domanda se io avessi una stringa del tipo
    AnsiString origine; (valorizzata tramite un Edit (VC++))

    come faccio a fare la stessa cosa?

    RISPONDETEMI PER FAVORE!!!
    GREAZIE A TUTTI
    CIAO
    Credo che l'AnsiString possa essere trattata allo stesso modo
    La luce è più veloce del suono,ecco xchè alcune persone sembrano brillanti fino a quando non parlano


  3. #3
    grazie...
    con il char ho risolto e credo che si possa fare anche con

    char stringa[]="ciao";
    while(stringa[i]!='\0'){
    ....
    ....

    }
    giusto?

    Ma se io volessi con una AnsiString non va proprio!
    tipo:

    AnsiString prova;

    // e poi faccio
    prova=Edit1->Text;

    while(prova[i]!='\0'){
    ....
    ....

    }

    Non va!
    QLC1 LO SA??
    GRAZIE

  4. #4
    Una alternativa altrimenti

    ricapitolando:

    ho creato un form con una Edit nel quale un utente inserisce un testo... io questo testo devo poter manipolarlo cioe' devo poter testare con un if ogni SINGOLO carattere del testo inserito nella memo...

    come posso fare??

    grazie

  5. #5
    Originariamente inviato da NeoArgo
    Una alternativa altrimenti

    ricapitolando:

    ho creato un form con una Edit nel quale un utente inserisce un testo... io questo testo devo poter manipolarlo cioe' devo poter testare con un if ogni SINGOLO carattere del testo inserito nella memo...

    come posso fare??

    grazie
    Non hai specificato se usi un IDE o meno, perche' alcune routine sono inserite di default e ti potrebbero essere d'aiuto (tipo C++ Builder).
    Una soluzione potrebbe essere quella di convertire il testo edit in una stringa stile C (con la funzione c_str()), e poi con un ciclo while scorri questa nuova stringa deferenziando la variabile.

    Ciao

  6. #6
    allora vediamo

    uso Borland c++ 6

    il form e' cosi:

    MEMO1 | MEMO2
    _________________

    crea(BUTTON1)

    ho necessita di avere accesso ad ogni singolo carattere contenuto nella memo1 (tramite ciclo) modificarlo e restituire la stringa modificata nella memo2

    AIUTATEMI VI PREGO!

  7. #7
    Originariamente inviato da NeoArgo
    allora vediamo

    uso Borland c++ 6

    il form e' cosi:

    [cut]
    Ti posto un breve codice al volo, per convertire e controllare una sequenza di caratteri in stile C. Nel caso di una stringa e' molto piu' facile (puoi scorrere la stringa con un ciclo for e controllare ogni singolo carattere mediante la sintassi degli array):

    //ciclo esterno in modo da scorrere ogni singola riga del Memo
    char *str=Memo1->Lines->Text.c_str();
    do
    {
    if (*str=='a')
    //tue istruzioni
    }
    while (*str++);

    Guarda nell'help in linea potresti trovare quello che ti serve.

  8. #8
    ho provato e modificato in

    int i=0;
    char *str=Memo1->Lines->Text.c_str();

    while (*str++){
    if (*str!='\0'){
    ......
    i++;
    }
    }

    (per prova conto i caratteri nel testo memo)

    ma...se nella Memo inserico il testo "ciaociao";
    lui non mi restituisce 8 ogni volta:

    avvio il ciclo e una volta mi restituisce 8 la successiva 7 poi 8 poi 7 e cosi' via!

    Perche'?

  9. #9
    !!!! ADDIRITTURA SE SCRIVO IL MIO NOME "NICOLA" MI CONTA 4 CARATTERI!!!

    UFFA!!

  10. #10
    Originariamente inviato da NeoArgo
    !!!! ADDIRITTURA SE SCRIVO IL MIO NOME "NICOLA" MI CONTA 4 CARATTERI!!!

    UFFA!!
    Ciao,
    se ti puo' consolare ho provato io stesso questo codice e non funziona:
    al posto dell'istruzione char *str=Memo1->Lines->Text.c_str(); //che estrapola tutto il contenuto del memo
    ho inserito questa:
    char *str=Memo1->Lines->Strings[0].c_str(); //in questo caso la prima riga
    //e poi le istruzioni
    int cont=0;
    while (*str++) { //calcola che così fatto il ciclo salta il primo carattere, poiche' vi e' l'incremento
    if (*str!='0') //dovresti togliere il carattere '\' dal tuo controllo
    cont++;
    }
    ShowMessage("caratteri: "+IntToStr(cont));


    ebbene, mi stampa il valore intero 1. In pratica il ciclo effettua una sola iterazione.
    Allora: ho tutti e due abbiamo dimenticato l'artimetica dei puntatori, o non saprei proprio cosa e' successo.

    ho provato anche a scrivere il ciclo così:
    int i=0;
    while (*(str+i)) {
    .......
    i++
    }


    ma non va lo stesso.

    In alternativa ti posto questo codice, ti garantisco al 1000% che funziona, e un pezzo di codice che avevo scritto

    per il Builder molto tempo fa:
    unsigned int contline, cont, i, j;
    cont=0;
    AnsiString linea;
    contline=reText->Lines->Count;
    for (i=0; i<contline; i++)
    {
    //memorizzo una riga alla volta e la scorro
    linea=reText->Lines->Strings[i];
    for (j=1; j<linea.Length(); j++)
    {
    if (linea[j]>='a' && linea[j]<='z' || linea[j]>='A' && linea[j]<='Z' || linea[j]>='0' && linea[j]<='9')
    cont++;
    }
    }
    MessageDlg("Il documento contiene:\n"+IntToStr(reText->GetTextLen())+" caratteri,\ndi cui "+cont+" di solo

    testo in \n"+contline+" righe totali",mtInformation, TMsgDlgButtons()<<mbOK, 0);


    Come puoi notare, conto i caratteri, i caratteri di testo semplice e le righe totali.
    Con le opportune modifiche puoi estrarre quello che ti serve.

    Fammi sapere.
    Se c'è qualcuno che vuole illuminarci sul ciclo while, ci farà ad entrambi un grande favore!

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 © 2024 vBulletin Solutions, Inc. All rights reserved.