[C++] Problema con le classi

Messaggioda ilsaggio » 05/11/2021, 18:07

Ciao a tutti :) sono alle prime armi con il C++ per questo vi chiedo un aiuto su questo problema. Ho creato una classe Book che ha come dato membro privato
Codice:
string code_;
Io voglio fare un controllo sul codice del libro e voglio che sia composto solo da 4 numeri interi.
Io ho scritto questo codice:
Codice:
#include "Book.h"
#include <iostream>
#include <string>
using namespace std;
using std::string;

Book::Book(string code)
    :code_{code}
{   
   for(int i=0; i<4; ++i)
        if( code_[i].find("0")== string::npos || code_[i].find("1")== string::npos || code_[i].find("2")==
         string::npos|| code_[i].find("3")==string::npos ||
         code_[i].find("4")== string::npos || code_[i].find("5")== string::npos ||code_[i].find("6")==
         string::npos ||code_[i].find("7")==string::npos ||
         code_[i].find("8")== string::npos || code_[i].find("9")== string::npos)
                cerr<< "Invalid code" << endl;
}

Dove ho usato la funzione find() della standard library per le stringhe.
So che è un brutto codice e ci sono mille altri metodi per arrivare alla soluzione, ma in questo particolare caso ho il problema che la funzione find() non viene riconosciuta come membro di Book e viene il seguente errore:
error: request for member ‘find’ in ‘((Book*)this)->Book:...

Io voglio capire come poter usare comunque la funzione find e se non si può quale sia il problema, quindi non voglio che mi consigliate altre possibili soluzioni. Grazie!

(Suppongo che il problema sia che sto cercando di usare un dato membro con una funzione che non fa parte della classe Book)
Avatar utente
ilsaggio
Junior Member
Junior Member
 
Messaggio: 216 di 440
Iscritto il: 12/12/2016, 22:08

Re: [C++] Problema con le classi

Messaggioda feddy » 05/11/2021, 19:33

Ciao saggio,

hai provato a includere <string> ?

Inoltre, credo che il problema sia perché stai chiamando find() sull'i-esimo elemento della stringa, non sulla stringa intera.
Avatar utente
feddy
Moderatore
Moderatore
 
Messaggio: 2879 di 5934
Iscritto il: 26/06/2016, 00:25
Località: SISSA

Re: [C++] Problema con le classi

Messaggioda Quinzio » 05/11/2021, 21:00

code_[i] e' un carattere, non ha come funzione membro una "find".
Ti basta fare code_[i] == '1' ad esempio.
Quinzio
Cannot live without
Cannot live without
 
Messaggio: 4680 di 10548
Iscritto il: 24/08/2010, 06:50

Re: [C++] Problema con le classi

Messaggioda ilsaggio » 05/11/2021, 23:40

Grazie ad entrambi, era semplicemente quello il problema, ma pensandoci find() non va bene per il mio problema, perché non riconoscerebbe ad esempio un errore di questo tipo 12a4
Avatar utente
ilsaggio
Junior Member
Junior Member
 
Messaggio: 217 di 440
Iscritto il: 12/12/2016, 22:08

Re: [C++] Problema con le classi

Messaggioda feddy » 05/11/2021, 23:45

Prego :-) Non andrebbe bene perché il tuo obiettivo è di avere un codice con solo 4 interi, giusto?
Avatar utente
feddy
Moderatore
Moderatore
 
Messaggio: 2880 di 5934
Iscritto il: 26/06/2016, 00:25
Località: SISSA

Re: [C++] Problema con le classi

Messaggioda ilsaggio » 06/11/2021, 00:39

Esattamente, domani provo a sistemare il codice
Avatar utente
ilsaggio
Junior Member
Junior Member
 
Messaggio: 218 di 440
Iscritto il: 12/12/2016, 22:08

Re: [C++] Problema con le classi

Messaggioda apatriarca » 06/11/2021, 18:43

Ma qualcosa tipo:
Codice:
if (code_.size() != 4 || !isdigit(code_[0]) || !isdigit(code_[1]) || !isdigit(code_[2]) || !isdigit(code_[3])
   std::cerr << "Invalid code\n";

non sarebbe meglio? Tu stai verificando se almeno una cifra è tra i caratteri della stringa, ma la condizione che vuoi testare è che tutti i caratteri siano cifre e che queste cifre sono solo 4.
apatriarca
Moderatore
Moderatore
 
Messaggio: 5621 di 10436
Iscritto il: 08/12/2008, 20:37
Località: Madrid

Re: [C++] Problema con le classi

Messaggioda ilsaggio » 06/11/2021, 21:20

Non sapevo dell'esistenza della funzione isdigit della Standard library, era proprio quello che cercavo! Grazie ;)
Avatar utente
ilsaggio
Junior Member
Junior Member
 
Messaggio: 219 di 440
Iscritto il: 12/12/2016, 22:08

Re: [C++] Problema con le classi

Messaggioda apatriarca » 06/11/2021, 21:41

E' abbastanza semplice da implementare perché tutte le cifre sono valori consecutivi in credo tutte le codifiche di caratteri esistenti e in particolare in ASCII che è quella molto probabilmente utilizzata nel tuo caso. La funzione può quindi essere implementata come segue:
Codice:
int isdigit(int c)
{
    return '0' <= c && c <= '9';
}
apatriarca
Moderatore
Moderatore
 
Messaggio: 5622 di 10436
Iscritto il: 08/12/2008, 20:37
Località: Madrid


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite