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++ - classe stringa
Forum - C/C++ - classe stringa

Avatar
matteog (Normal User)
Pro


Messaggi: 149
Iscritto: 10/04/2009

Segnala al moderatore
Postato alle 19:39
Venerdì, 01/01/2010
salvè
stò cercando di creare il costruttore della classe stringa sotto posto il codice:
l'errore che mi dà il compilatore non è comprensibile nel senso che non mi da un errore ben preciso credo dipenda dal fatto che devo aver sbagliato qualcosa di concettuale.
Codice sorgente - presumibilmente C++

  1. class stringa
  2. {
  3.         stringa(char *str1)
  4.         {
  5.           str1=new char;
  6.                
  7.         }
  8. };
  9. int main()
  10. {
  11.         //creo due vettori di char
  12.         stringa str1,str2;//credo non vada bene qui perche sembra che non riconosca     l'oggetto che gli viene passato e quindi non costruisca  mi sapete aiutare?
  13.         cout<<"inserire prima stringa"<<endl;
  14.         gets(str1);
  15.         cout<<"inserire la seconda stringa"<<endl;
  16.         gets(str2);
  17.         int m=strlen(str1);
  18.         int n=strlen(str2);
  19.         char *str3;
  20.         str3=new char;
  21.         int fin=m+n+1;
  22.         int k=0;
  23.         cout<<str3;
  24.         system("pause");
  25. }



in più mi sono anche accorto che non mi riconosce le funzioni strlen di conseguenza, vi prego aiutatemi!!

Ultima modifica effettuata da matteog il 01/01/2010 alle 19:42


matteog
PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 21:10
Venerdì, 01/01/2010
Ho letto il tuo sorgente, e non ho capitoquale sia il suo scopo, ma ho notato che:

1- Il costruttore della classe "stringa" è "private", qindi non visibile all' esterno    
     della classe.
2- Per diciarare un oggetto "stringa" è necessario passare una stringha
    (es.: stringa str1("frase") , non stringa str1)
3- "str1" e "str2" sono oggetti "stringa", non stringhe, quindi
    l' istruzione "gets(str2);" non ha senso.

Ultima modifica effettuata da il 01/01/2010 alle 21:16
PM Quote
Avatar
matteog (Normal User)
Pro


Messaggi: 149
Iscritto: 10/04/2009

Segnala al moderatore
Postato alle 21:12
Venerdì, 01/01/2010
ok allora lo scopo è creare un costruttore per le strinche senza utilizare la libreria #include<string>
per il discorso che hai trattato te è proprio quello il problema non sò come creare la stringa perchè se uso il char* str; funziona però mediante quel costruttore no!


matteog
PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 21:25
Venerdì, 01/01/2010
Usa #include<string>!!

Te lo consiglio cladamente!

Prova questo programma:
Codice sorgente - presumibilmente C++

  1. #include <iostream>
  2. #include <string>
  3.  
  4. using namespace std;
  5.  
  6. int main()
  7. {
  8.     //creo due vettori di char
  9.     string a, b, c;
  10.     a="Hello";
  11.     b=" word!";
  12.     c=a+b;
  13.     cout<<c<<endl;
  14.     system("pause");
  15.     return 0;
  16. }


PM Quote
Avatar
matteog (Normal User)
Pro


Messaggi: 149
Iscritto: 10/04/2009

Segnala al moderatore
Postato alle 21:27
Venerdì, 01/01/2010
la conosco ma non posso usarla perchè è un compito per le vacanze e il mio professore ha detto che non possiamo usare quella libreria.Il mio solo problema è il costruttore non sò come modificalo per costruire ciascuna stringa che in teoria dovrebbe essere un char *str1;
io vorrei fare in modo che mediante il costruttore la str1 diventasse una stringa dinamica qualche consiglio?


matteog
PM Quote
Avatar
GuglielmoS (Ex-Member)
Pro


Messaggi: 114
Iscritto: 27/11/2009

Segnala al moderatore
Postato alle 23:05
Venerdì, 01/01/2010
Testo quotato

Postato originariamente da matteog:

la conosco ma non posso usarla perchè è un compito per le vacanze e il mio professore ha detto che non possiamo usare quella libreria.Il mio solo problema è il costruttore non sò come modificalo per costruire ciascuna stringa che in teoria dovrebbe essere un char *str1;
io vorrei fare in modo che mediante il costruttore la str1 diventasse una stringa dinamica qualche consiglio?


Devi giocare con la gestione dinamica della memoria.
Quindi per esempio avrai:
Codice sorgente - presumibilmente C++

  1. #include <cstring>
  2.  
  3. class stringa
  4. {
  5. private:
  6.     char *str;
  7.     int len;
  8. public:
  9.     stringa() {
  10.       str = (char*)malloc(1);
  11.       str[0] = '\0';
  12.       len = 1;
  13.     }
  14.  
  15.     stringa(char *str1)
  16.     {
  17.       str = strdup(str1);    
  18.       len = strlen(str);  
  19.       // Se non puoi usare le funzioni della cstring ricreale te che non sono difficilissime da implementare
  20.     }
  21.  
  22.     char chartAt(int pos) {
  23.         if (pos > 0 || pos < len)
  24.             return str[pos];
  25.     }
  26.  
  27.     void append(char ch) {
  28.         len++;
  29.         str = (char*)realloc(str, len);
  30.         str[len-2] = ch;
  31.         str[len-1] = '\0';
  32.     }
  33.  
  34.     int length() {
  35.         return length;
  36.     }
  37.  
  38.     char *getString() {
  39.         return str;
  40.     }
  41. };


Naturalmente questo è solo un esempio, poi sta a te decidere cosa mettere e come modificare il tutto.
Ciao GuglielmoS

Ultima modifica effettuata da GuglielmoS il 01/01/2010 alle 23:08


La disumanità del computer sta nel fatto che, una volta programmato e messo in funzione, si comporta in maniera perfettamente onesta.
--Isaac Asimov
PM Quote
Avatar
matteog (Normal User)
Pro


Messaggi: 149
Iscritto: 10/04/2009

Segnala al moderatore
Postato alle 7:37
Sabato, 02/01/2010
ok adesso ho capito tanks mi mancava una cosanel costruttore:k:


matteog
PM Quote