Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2010
    Messaggi
    99

    [C]aiuto con funzione strcat fatta in casa!

    buonasera, sto cercando di scrivere una funzione che faccia lo stesso mestiere di strcat, cioè prende 2 stringhe, le concatena e restituisce la prima (contenente sia la prima che la seconda).
    ho fatto la funzione utilizzando gli indici di vettore e funziona, mentre usando l'aritmetica dei puntatori non funziona, al massimo mi copia un carattere, alla peggio mi aggiunge un carattere strano... ecco qui quanto scritto fino ad ora :

    p.s.: la parte nel commento è la versione degli indici di vettore, qui non serve a niente

    codice:
    #include<stdio.h>
    char *stringCat(char *s1,const char *s2);
    int main(void)
    {
    	char *s1;
    	char *s2;
    	gets(s1);
    	gets(s2);
    	stringCat(s1,s2);
    	puts(s1);
    	return 0;
    }
    char *stringCat(char *s1,const char *s2)
    {
    	int i,t;
    	for(i=0;s1[i]!='\0';i++){;}
    	/*for(t=0;s2[t]!='\0';t++,i++){
    		s1[i]=s2[t];
    	}*/
    	s1[i]+=s2[0];
    	return (s1);
    }
    un grazie se potete aiutarmi e un grazie lo stesso

  2. #2
    Il primo pezzo per determinare la lunghezza della prima stringa va bene (anche se si può fare anche di soli puntatori), il secondo non ha molto senso... come speri di copiare tutta la seconda stringa sommando un carattere ad un altro?

    Una versione "di soli puntatori" può essere questa:
    codice:
    char *stringCat(char *s1, const char *s2)
    {
        char * d=s1;
        while(*d)
            ++d;
        while(*d++=*s2++)
            ;
        return s1;
    }
    o, più leggibile:
    codice:
    char *stringCat(char *s1, const char *s2)
    {
        char * d=s1;
        while(*d != '\0')
            ++d;
        do
        {
            *d=*s2;
            ++d;
            ++s2;
        } while(*d);
        return s1;
    }
    Ragionaci su.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2010
    Messaggi
    99
    ad usare un altro puntatore non ci avevo pensato, grazie mille
    ma c'è qualche differenza di prestazioni, memoria etc... fra l'usare il tuo metodo oppure facendo così?
    codice:
    {
    int i,t=0;
    for(i=0;s1[i]!='\0';i++);
    while(s2[t]!='\0')
    	s1[i++]+=s2[t++]; 
    return 0;
    }

  4. #4
    La versione con puntatori potrebbe essere leggermente più veloce, ma è sostanzialmente indifferente.
    In ogni caso, è
    codice:
    	s1[i++]=s2[t++];
    non += (non devi incrementare, ma copiare)
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2010
    Messaggi
    99
    ti ringrazio veramente per l'aiuto che mi hai dato

  6. #6
    Amaro C++, il gusto pieno dell'undefined behavior.

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.