Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2005
    Messaggi
    117

    [C++] Problema con operatore

    codice:
    #include <stdio.h>
    #include <strings.h>
    #include <malloc.h>
    
    class Stringa
    {
    	public:
    		char *s;
    		int lunghezza;
    	public:
    		Stringa(void)
    		{
    			s = (char *)malloc(512);
    			s[0] = '\0';
    			lunghezza = 0;
    		}
    		
    		Stringa(char *p)
    		{
    			s = (char *)malloc(512);
    			int i;
    			for (i = 0; (s[i] = p[i]) != '\0'; i++)
    				;
    			lunghezza = i;
    		}
    		
    		Stringa(int k)
    		{
    			s = (char *)malloc(k);
    			s[0] = '\0';
    			lunghezza = 0;
    		}
    		
    		Stringa(char *p, int k)
    		{
    			s = (char *)malloc(k);
    			int i;
    			for (i = 0; (s[i] = p[i]) != '\0'; i++)
    				;
    			lunghezza = i;
    		}
    		
    		~Stringa(void)
    		{
    			s[0] = '\0';
    			lunghezza = 0;
    		}
    		
    		void write(void)
    		{
    			printf("%s",s);
    		}
    		
    		void writeln(void)
    		{
    			printf("%s\n",s);
    		}
    		
    		int lung(void)
    		{
    			return lunghezza;
    		}
    		
    		void input(void)
    		{
    			char c;
    			int i;
    			for (i = 0; (c = getchar()) != '\n'; i++)
    				s[i] = c;
    			s[i] = '\0';
    			lunghezza = i;
    		}
    		
    		void modifica(int i, char c)
    		{
    			if (i > 0 && i <= lunghezza)
    				s[i-1] = c;
    		}
    		
    		int operator==(Stringa &x)
    		{
    			return !(strcmp(s,x.s));
    		}
    
    		int operator==(char *x)
    		{
    			return !(strcmp(s,x));
    		}
    
    				
    		int operator<(Stringa &x)
    		{
    			return (strcmp(s,x.s) == -1);
    		}
    
    		int operator<(char *x)
    		{
    			return (strcmp(s,x) == -1);
    		}
    
    				
    		int operator>(Stringa &x)
    		{
    			return (strcmp(s,x.s) == 1);
    		}
    
    		int operator>(char *x)
    		{
    			return (strcmp(s,x) == 1);
    		}
    
    		
    		int operator<=(Stringa &x)
    		{
    			return ((*this == x) || (*this < x));
    		}
    
    		int operator<=(char *x)
    		{
    			return ((*this == x) || (*this < x));
    		}
    
    				
    		int operator>=(Stringa &x)
    		{
    			return ((*this > x) || (*this == x));
    		}
    
    		int operator>=(char *x)
    		{
    			return ((*this > x) || (*this == x));
    		}
    
    		Stringa operator+(Stringa &x)
    		{
    			Stringa z;
    			int i,k;
    			for (i = 0; s[i] != '\0'; i++)
    				z.s[i] = s[i];
    			for (k = 0; x.s[k] != '\0'; k++)
    				z.s[i++] = x.s[k];
    			z.s[i] = '\0';
    			z.lunghezza = i;
    			return z;
    		}
    		
    		void operator+=(Stringa &x)
    		{
    			*this = *this + x;
    		}
    		
    		
    		
    		void operator=(char *z)
    		{
    			int i;
    			for (i = 0; (s[i] = z[i]) != '\0'; i++)
    				;
    			lunghezza = i;
    		}		
    };
    
    #include <stdlib.h>
    
    int main()
    {
    	system("cls");
    	Stringa a;
    	Stringa b;
    	Stringa c;
    	a.input();
    	b.input();
    	c = a + b;
    	printf("\n\n");
    	a.writeln();
    	b.writeln();
    	c.write();
    }
    salve, vorrei sapere perchè il codice sopra riportanto non funziona. Non stampa la stringa c.
    Però se s lo metto come un array statico va tutto bene... qualcuno mi può aiutare?

  2. #2
    Manca il costruttore per copia

    Stringa(Stringa & str)
    {
    ....
    }

    che viene chiamato in automatico quando copi un valore in un altro.

    Altrimenti il valore che ritorni nel codice dell'operatore + viene distrutto prima di potere essere copiato nella variabile a cui fai l'assegnazione.


    VEDI http://www.fredosaurus.com/notes-cpp...structors.html

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2005
    Messaggi
    117
    codice:
    #include <stdio.h>
    #include <strings.h>
    #include <malloc.h>
    
    class Stringa
    {
    	public:
    		char *s;
    		int lunghezza;
    	public:
    		Stringa(void)
    		{
    			s = (char *)malloc(512);
    			s[0] = '\0';
    			lunghezza = 0;
    		}
    		
    		Stringa(char *p)
    		{
    			s = (char *)malloc(512);
    			int i;
    			for (i = 0; (s[i] = p[i]) != '\0'; i++)
    				;
    			lunghezza = i;
    		}
    		
    		Stringa(int k)
    		{
    			s = (char *)malloc(k);
    			s[0] = '\0';
    			lunghezza = 0;
    		}
    		
    		Stringa(char *p, int k)
    		{
    			s = (char *)malloc(k);
    			int i;
    			for (i = 0; (s[i] = p[i]) != '\0'; i++)
    				;
    			lunghezza = i;
    		}
    		
    		Stringa(const Stringa& x)
    		{
    			for (lunghezza = 0; lunghezza < x.lunghezza; lunghezza++)
    				s[lunghezza] = x.s[lunghezza];
    		}
    		
    		~Stringa(void)
    		{
    			s[0] = '\0';
    			lunghezza = 0;
    		}
    		
    		void write(void)
    		{
    			printf("%s",s);
    		}
    		
    		void writeln(void)
    		{
    			printf("%s\n",s);
    		}
    		
    		int lung(void)
    		{
    			return lunghezza;
    		}
    		
    		void input(void)
    		{
    			char c;
    			int i;
    			for (i = 0; (c = getchar()) != '\n'; i++)
    				s[i] = c;
    			s[i] = '\0';
    			lunghezza = i;
    		}
    		
    		void modifica(int i, char c)
    		{
    			if (i > 0 && i <= lunghezza)
    				s[i-1] = c;
    		}
    		
    		int operator==(Stringa &x)
    		{
    			return !(strcmp(s,x.s));
    		}
    
    		int operator==(char *x)
    		{
    			return !(strcmp(s,x));
    		}
    
    				
    		int operator<(Stringa &x)
    		{
    			return (strcmp(s,x.s) == -1);
    		}
    
    		int operator<(char *x)
    		{
    			return (strcmp(s,x) == -1);
    		}
    
    				
    		int operator>(Stringa &x)
    		{
    			return (strcmp(s,x.s) == 1);
    		}
    
    		int operator>(char *x)
    		{
    			return (strcmp(s,x) == 1);
    		}
    
    		
    		int operator<=(Stringa &x)
    		{
    			return ((*this == x) || (*this < x));
    		}
    
    		int operator<=(char *x)
    		{
    			return ((*this == x) || (*this < x));
    		}
    
    				
    		int operator>=(Stringa &x)
    		{
    			return ((*this > x) || (*this == x));
    		}
    
    		int operator>=(char *x)
    		{
    			return ((*this > x) || (*this == x));
    		}
    
    		Stringa operator+(Stringa &x)
    		{
    			Stringa z;
    			int i,k;
    			for (i = 0; s[i] != '\0'; i++)
    				z.s[i] = s[i];
    			for (k = 0; x.s[k] != '\0'; k++)
    				z.s[i++] = x.s[k];
    			z.s[i] = '\0';
    			z.lunghezza = i;
    			return z;
    		}
    		
    		void operator+=(Stringa &x)
    		{
    			*this = (*this + x);
    		}
    		
    		
    		
    		void operator=(char *z)
    		{
    			int i;
    			for (i = 0; (s[i] = z[i]) != '\0'; i++)
    				;
    			lunghezza = i;
    		}		
    };
    
    #include <stdlib.h>
    
    int main()
    {
    	system("cls");
    	Stringa a;
    	Stringa b;
    	Stringa c;
    	a.input();
    	b.input();
    	c = a + b;
    	printf("\n\n");
    	a.writeln();
    	b.writeln();
    	c.write();
    }
    L'ho modificato così... ma non mi va lo stesso... mi sapresti dire come fare?

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2005
    Messaggi
    117
    RISOLTO! thanks!

  5. #5
    Utente di HTML.it L'avatar di DydBoy
    Registrato dal
    Jul 2005
    Messaggi
    165
    Ti dispiace postare la soluzione ?

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2005
    Messaggi
    117
    codice:
    #include <stdio.h>
    #include <strings.h>
    #include <malloc.h>
    
    class Stringa
    {
    	private:
    		char *s;
    		int lunghezza;
    		int max;
    	public:
    		Stringa(void)
    		{
    			s = (char *)malloc(513);
    			s[0] = '\0';
    			lunghezza = 0;
    			max = 512;
    		}
    		
    		Stringa(char *p)
    		{
    			s = (char *)malloc(513);
    			int i;
    			for (i = 0; (s[i] = p[i]) != '\0'; i++)
    				;
    			lunghezza = i;
    			max = 512;
    		}
    		
    		Stringa(int k)
    		{
    			s = (char *)malloc(k+1);
    			s[0] = '\0';
    			lunghezza = 0;
    			max = k;
    		}
    		
    		Stringa(char *p, int k)
    		{
    			s = (char *)malloc(k);
    			int i;
    			for (i = 0; (s[i] = p[i]) != '\0'; i++)
    				;
    			lunghezza = i;
    			max = k;
    		}
    		
    		Stringa(const Stringa& x)
    		{
    			max = (x.lunghezza)+1;
    			s = (char *)malloc(max);
    			for (lunghezza = 0; lunghezza < x.lunghezza; lunghezza++)
    				s[lunghezza] = x.s[lunghezza];
    		}
    		
    		~Stringa(void)
    		{
    			s[0] = '\0';
    			lunghezza = 0;
    			max = 0;
    		}
    		
    		void write(void)
    		{
    			printf("%s",s);
    		}
    		
    		void writeln(void)
    		{
    			printf("%s\n",s);
    		}
    		
    		int lung(void)
    		{
    			return lunghezza;
    		}
    		
    		void input(void)
    		{
    			char c;
    			int i;
    			for (i = 0; (c = getchar()) != '\n' && i < max; i++)
    				s[i] = c;
    			s[i] = '\0';
    			lunghezza = i;
    			fflush(stdin);
    		}
    		
    		void modifica(int i, char c)
    		{
    			if (i > 0 && i <= lunghezza)
    				s[i-1] = c;
    		}
    		
    		Stringa operator=(const Stringa& x)
    		{
    			strcpy(s,x.s);
    			lunghezza = x.lunghezza;
    		}
    		
    		int operator==(Stringa &x)
    		{
    			return !(strcmp(s,x.s));
    		}
    
    		int operator==(char *x)
    		{
    			return !(strcmp(s,x));
    		}
    
    				
    		int operator<(Stringa &x)
    		{
    			return (strcmp(s,x.s) == -1);
    		}
    
    		int operator<(char *x)
    		{
    			return (strcmp(s,x) == -1);
    		}
    
    				
    		int operator>(Stringa &x)
    		{
    			return (strcmp(s,x.s) == 1);
    		}
    
    		int operator>(char *x)
    		{
    			return (strcmp(s,x) == 1);
    		}
    
    		
    		int operator<=(Stringa &x)
    		{
    			return ((*this == x) || (*this < x));
    		}
    
    		int operator<=(char *x)
    		{
    			return ((*this == x) || (*this < x));
    		}
    
    				
    		int operator>=(Stringa &x)
    		{
    			return ((*this > x) || (*this == x));
    		}
    
    		int operator>=(char *x)
    		{
    			return ((*this > x) || (*this == x));
    		}
    
    		Stringa operator+(Stringa &x)
    		{
    			Stringa z;
    			int i,k;
    			for (i = 0; s[i] != '\0'; i++)
    				z.s[i] = s[i];
    			for (k = 0; x.s[k] != '\0'; k++)
    				z.s[i++] = x.s[k];
    			z.s[i] = '\0';
    			z.lunghezza = i;
    			return z;
    		}
    		
    		void operator+=(Stringa &x)
    		{
    			*this = (*this + x);
    		}
    		
    		
    		
    		void operator=(char *z)
    		{
    			int i;
    			for (i = 0; (s[i] = z[i]) != '\0'; i++)
    				;
    			lunghezza = i;
    		}		
    };
    eccola...

    nel costruttore di copia non allocavo e poi non c'era l'operatore= (Stringa)

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.