Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - problema controllo stringhe
Forum - C/C++ - problema controllo stringhe

Avatar
frenk88 (Normal User)
Rookie


Messaggi: 26
Iscritto: 02/07/2009

Segnala al moderatore
Postato alle 23:45
Venerdì, 17/07/2009
Buonasera a tutti...sono di nuovo qui perchè avrei bisogno del vostro aiuto per risolvere alcune cose che voglio fare.
vi spiego il mio problema...io in un programma devo prevedere l'inserimento di un dato utente che inserirà nome,cognome e altri dati. Gli utenti veranno salvati volta per volta in un db (file di testo).Vorrei inanzitutto prevedere un controllo sui caratteri inseriti che tipo il nome sia formato solo da lettere e cosiì anche il cognome:devo quindi fare un ciclo che mi controlli i vari caratteri che formano i nomi con quelli della tabella ASCII corrispondenti solo a lettere ma non so come va fatto il controllo(i nomi gli passo come string).
E un altra cosa che vorrei fare e che il mio programma consideri uguali nomi differenti solo per maiuscole o minuscole ossia che salvi nel db solo una volta utenti come Mario Rossi,mario rossi,MARIO ROSSI e tutte le possibili combinazioni di maiuscole e minuscole cioè in pratica non dare importanza a maiuscole e minuscole nel testo inserito.Come va implementato questo controllo?
Grazie mille della vostra disponibilità e del vostro aiuto.....

PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 8:44
Sabato, 18/07/2009
Includi l'header

#include <cctype>

e usa un ciclo, carattere per carattere della stringa inserita.

Nel ciclo usa la

isalpha(...)

per controllare il fatto che ogni carattere sia strettamente alfabetico e la

toupper(...)

per trasformarlo comunque in maiuscolo prima di scriverlo.


- Se le mie risposte non vi soddisfano, ignoratele, altrimenti un "grazie" e' molto gradito ...

"Dai un pesce (programma) a un uomo e lo nutrirai per un giorno. Insegnagli a pescare (programmare) e lo nutrirai per tutta la vita." (niente pappa pronta)
PM Quote
Avatar
frenk88 (Normal User)
Rookie


Messaggi: 26
Iscritto: 02/07/2009

Segnala al moderatore
Postato alle 9:29
Sabato, 18/07/2009
ma come devo fare per effettuare il controllo su tipo string.Si deve passare carattere per carattere e quindi precedentemente devo considerare un contatore che mi dica di quante lettere è formato la parola che inserisco oppure posso utilizzare un carattere limitatore ad es se io ho:



Codice sorgente - presumibilmente Plain Text

  1.  


{                             string nome_cliente;
                              string cognome_cliente;
                              cout << endl << "Inserisci il nome..." << " nome: ";
                              cin >> nome_cliente;  
                              cout << "Inserisci il cognome..." << " cognome: ";
                              cin >> cognome_cliente;
Codice sorgente - presumibilmente Plain Text

  1.  



e devo effettuare un controllo sia su nome che cognome come faccio.grazie

PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 11:51
Sabato, 18/07/2009
La classe string prevede il membro pubblico

length()

con cui puoi trovare il numero di caratteri della stringa. Ti basta quindi un ciclo

for

che inizia da 0 e termina a lenght() - 1 per controllare la tua stringa ...

Saprai scrivere un ciclo for ... no?


- Se le mie risposte non vi soddisfano, ignoratele, altrimenti un "grazie" e' molto gradito ...

"Dai un pesce (programma) a un uomo e lo nutrirai per un giorno. Insegnagli a pescare (programmare) e lo nutrirai per tutta la vita." (niente pappa pronta)
PM Quote
Avatar
frenk88 (Normal User)
Rookie


Messaggi: 26
Iscritto: 02/07/2009

Segnala al moderatore
Postato alle 15:58
Domenica, 19/07/2009
Ho provato a fare un programma di prova mi faccio inserire nome di un utente e in un doppio ciclo il controllo che sia composto solo da lettere con la funzione isalpha() e sempre nello stesso ciclo prevedo che il nome venga trasformato tutto in maiuscolo. Il programma sembrava funzionare ma dopo varie prove mi sono accorto che non va del tutto.Cioè se io inserisco tante volte un nome non alfanumerico (contenente anche simboli) e poi inserisco un nome composto solo da lettere il programma non mi converte la prima lettera in maiuscolo mentre tutte le altre si.Cosa non va? Potete darmi un occhio al codice?
Ora lo posto...
Codice sorgente - presumibilmente Plain Text

  1.  

#include <cstdlib>
#include <iostream>
#include <cctype>
#include <string.h>
using namespace std;
int main(int argc, char *argv[])
{
string nome_cliente;
string cognome_cliente;
       cout << endl << "Inserisci il nome..." << " nome: ";
       cin >> nome_cliente;    
char c;
for(int i=0;i<nome_cliente.length();i++)
    {
                      
          for(int j=0;j<nome_cliente.length();j++)
          {        
          if(!isalpha(nome_cliente[j]))
              {cout<<"La parola inserita deve contenere solo lettere. Reinserire"<<endl;
               cin>>nome_cliente;
             continue;
              }
                      
          }                          
      c=nome_cliente;
      nome_cliente=(toupper(c));
          
                                          
      }
  
cout<<nome_cliente;                  
                              
    system("PAUSE");
    return EXIT_SUCCESS;                            
                              
}                              
Codice sorgente - presumibilmente Plain Text

  1.  



grazie mille

PM Quote
Avatar
frenk88 (Normal User)
Rookie


Messaggi: 26
Iscritto: 02/07/2009

Segnala al moderatore
Postato alle 15:59
Domenica, 19/07/2009
Ho provato a fare un programma di prova mi faccio inserire nome di un utente e in un doppio ciclo il controllo che sia composto solo da lettere con la funzione isalpha() e sempre nello stesso ciclo prevedo che il nome venga trasformato tutto in maiuscolo. Il programma sembrava funzionare ma dopo varie prove mi sono accorto che non va del tutto.Cioè se io inserisco tante volte un nome non alfanumerico (contenente anche simboli) e poi inserisco un nome composto solo da lettere il programma non mi converte la prima lettera in maiuscolo mentre tutte le altre si.Cosa non va? Potete darmi un occhio al codice?
Ora lo posto...
Codice sorgente - presumibilmente Plain Text

  1.  

#include <cstdlib>
#include <iostream>
#include <cctype>
#include <string.h>
using namespace std;
int main(int argc, char *argv[])
{
string nome_cliente;
string cognome_cliente;
       cout << endl << "Inserisci il nome..." << " nome: ";
       cin >> nome_cliente;    
char c;
for(int i=0;i<nome_cliente.length();i++)
    {
                      
          for(int j=0;j<nome_cliente.length();j++)
          {        
          if(!isalpha(nome_cliente[j]))
              {cout<<"La parola inserita deve contenere solo lettere. Reinserire"<<endl;
               cin>>nome_cliente;
             continue;
              }
                      
          }                          
      c=nome_cliente;
      nome_cliente=(toupper(c));
          
                                          
      }
  
cout<<nome_cliente;                  
                              
    system("PAUSE");
    return EXIT_SUCCESS;                            
                              
}                              
Codice sorgente - presumibilmente Plain Text

  1.  



grazie mille

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 19:42
Lunedì, 20/07/2009
Sinceramente non capisco il senso dei 2 cilcli for... io farei un ciclo for dentro un do while: nel ciclo for farei il controllo di ogni carette con isalpha, e quando non è un carattere assegnerei alla variabile booleana nome_corretto = false. Poi il ciclo do while terminerà quando nome_corretto sarà = true... capito?
Per quanto riguarda i caratteri tutti maiuscoli basta scrivere nel cilco for
Codice sorgente - presumibilmente Plain Text

  1. c=nome_cliente[j];
  2.        nome_cliente[j]=toupper(c);



Ultima modifica effettuata da il 20/07/2009 alle 19:56
PM Quote