Algoritmi concatenazione stringhe

Discuti dei problemi relativi alla programmazione nel tuo linguaggio preferito!

Moderatori: cb_123, thrantir, tonertemplum

Algoritmi concatenazione stringhe

Messaggiodi `knives` il 19 gen 2011, 09:17

Quali algoritmi conoscete per concatenare 2 stringhe?

il prototipo della funzione che devo scrivere è del tipo

Codice: Seleziona tutto
BYTE * StrConCat(BYTE *s1,BYTE *s2)
{
      byte * puntatoreFineS1;
     puntatoreFineS1=s1;
    MENTRE(puntatorefineS1 != 0)
   allora : puntatoreFineS1 = puntatoreFineS1+1;
   *puntatoreFineS1=*s2;
   RITORNA s1;
}


oltre a BYTE * e la sintassi base, non posso usare nessuna funzione piu ad alto livello, sto lavorando su arm con linguaccio C ridotto.

potete aiutarmi?
Grazie ;)
vogliadidolci.wordpress.com
Avatar utente
`knives`
Moderatore
Moderatore
 
Messaggi: 6246
Iscritto il: 24 mar 2005, 01:57

 

Re: Algoritmi concatenazione stringhe

Messaggiodi thrantir il 19 gen 2011, 16:32

mamma mia lo pseudo codice in italiano ha un che di agghiacciante...

se puoi usare solo i costrutti piu' semplici non credo che ci siano molte possiblita'... di quello che hai scritto non mi torna la guardia, che dovrebbe essere testare quando finisce s2, non s1, e manca l'incremento del puntatore alla posizione corrente di s2
Fletto i muscoli e sono nel vuoto
Principi di architettura degli eleboratori
X postare immagini
-----BEGIN GEEK CODE BLOCK-----
GCS/IT/L/MU d- s: a C++$>+++ UL+>++ P L+++>++++ E--- W++ N++>+++ o+>++ K? w O-- M- VMS? V- PS++ Y+ PGP+ t 5? X+ R++>+++ tv+ b+++>++++ DI+++ D++ G e++ h- r++ y++
------END GEEK CODE BLOCK------
Addio Dani, sono più ricco perchè ti ho conosciuto
Avatar utente
thrantir
Moderatore
Moderatore
 
Messaggi: 8897
Iscritto il: 27 mag 2003, 13:32
Località: Pisa

Re: Algoritmi concatenazione stringhe

Messaggiodi `knives` il 20 gen 2011, 08:06

si in effetti non è il massimo come l ho scritto :mrgreen:

eheh ela fretta.. cmq poi ieri ho scritto questo :
Codice: Seleziona tutto
BYTE * strcat(BYTE *PtrCmd, BYTE *PtrParam)
   BYTE *PtrRslt;      //indirizzo della stringa completa
    BYTE *PtrEndCmd;    //indirizzo della fine stringa comando
   
       PtrEndCmd=PtrCmd;       
       while(*PtrEndCmd++ != '\0') continue;       
       while((*PtrEndCmd++ = *PtrParam++) != '\0')              //(*PtrParam++!='\0')
       {
            //PtrEndCmd=PtrParam;
            CMON_WrString (GSM_UART_PORT, 0,PtrEndCmd);
           // PtrEndCmd++;
       }

      *PtrEndCmd=0x00;
       PtrRslt = PtrCmd;
       CMON_WrString (GSM_UART_PORT, 0,PtrRslt);
       return PtrRslt; 


ma devo ricontrollare la fine della stringa perchè il secondo while non si ferma al posto giusto.

PtrCmd punta ad un array di byte di 200
PtrParam invece il puntatore ad un paramentro che essenzialmente è una stringa che puo essere inserita direttamente nello stack oppure pescata da una sd o dalla e^2.
alla fine concateno tutte e due le stringhe nell'array da 200byte.
vogliadidolci.wordpress.com
Avatar utente
`knives`
Moderatore
Moderatore
 
Messaggi: 6246
Iscritto il: 24 mar 2005, 01:57

Re: Algoritmi concatenazione stringhe

Messaggiodi thrantir il 20 gen 2011, 11:08

intanto io farei
Codice: Seleziona tutto
BYTE * strcat(BYTE *PtrCmd, BYTE *PtrParam) {
    BYTE *PtrRslt = PtrCmd;      //indirizzo della stringa completa
   
    while(*PtrCmd++ != '\0') continue;       
    while((*PtrCmd++ = *PtrParam++) != '\0')              //(*PtrParam++!='\0')
    {
         CMON_WrString (GSM_UART_PORT, 0,PtrCmd);
    }

    CMON_WrString (GSM_UART_PORT, 0,PtrRslt);
    return PtrRslt;
}


cioe' assegnare subito al risultato il suo valore (tanto lo fai comunque dopo il loop) e usare direttamente il parametro per iterare
la guardia del primo while non mi torna, credo che il puntatore si posizioni troppo avanti, perche' con l'incremento postfisso viene restituito il valore puntato prima dell'incremento, quindi quando la condizione e' vera l'elemento pari a '\0' e' quello precedente, mentre quella del secondo dovrebbe tornare
Fletto i muscoli e sono nel vuoto
Principi di architettura degli eleboratori
X postare immagini
-----BEGIN GEEK CODE BLOCK-----
GCS/IT/L/MU d- s: a C++$>+++ UL+>++ P L+++>++++ E--- W++ N++>+++ o+>++ K? w O-- M- VMS? V- PS++ Y+ PGP+ t 5? X+ R++>+++ tv+ b+++>++++ DI+++ D++ G e++ h- r++ y++
------END GEEK CODE BLOCK------
Addio Dani, sono più ricco perchè ti ho conosciuto
Avatar utente
thrantir
Moderatore
Moderatore
 
Messaggi: 8897
Iscritto il: 27 mag 2003, 13:32
Località: Pisa

Re: Algoritmi concatenazione stringhe

Messaggiodi `knives` il 20 gen 2011, 11:32

dimenticavo di aggiungere che questa:
CMON_WrString (GSM_UART_PORT, 0,PtrCmd);
non fa niente di che, cioè serve solo a me per reindirizzare qualcosa sulla porta com, siccome la scheda su cui sto lavorando non ha ne un display ne altro per sapere che fa la uso per monitorare il bus tramite hyperterminal.

ma il fine stringa uguale a 0 lo mette sempre il compilatore? perchè io infatti per sicurezza lo forzavo come avrai notato.
in effetti la tua osservazione sulla prima guardia potrebbe essere giusta.
il problema di questa applicazione è che una volta buttata sulla scheda non ho modo di eseguire un debug e quindi non riesco mai ad essere sicuro di quello che si sta eseguendo.
vogliadidolci.wordpress.com
Avatar utente
`knives`
Moderatore
Moderatore
 
Messaggi: 6246
Iscritto il: 24 mar 2005, 01:57

Re: Algoritmi concatenazione stringhe

Messaggiodi thrantir il 20 gen 2011, 12:06

lo standard non dice niente sul terminatore di stringa, e non e' che lo metta il compilatore, che non puo' sapere quando finisce una stringa. Quello che fanno molti compilatori e' "imbiancare" le aree di memoria mettendo 0 in tutti i bytes, spesso lo fanno solo se si copmila con opzioni di debug, pero' siccome non puoi esserne sicuro dovresti fare allocare con calloc oppure pulire tutto con la memset, cosi' sei sicuro che tutto cio' che non hai scritto tu esplicitamente sia un '/0', in particolare quando la stringa finisce ci sara' il terminatore
Fletto i muscoli e sono nel vuoto
Principi di architettura degli eleboratori
X postare immagini
-----BEGIN GEEK CODE BLOCK-----
GCS/IT/L/MU d- s: a C++$>+++ UL+>++ P L+++>++++ E--- W++ N++>+++ o+>++ K? w O-- M- VMS? V- PS++ Y+ PGP+ t 5? X+ R++>+++ tv+ b+++>++++ DI+++ D++ G e++ h- r++ y++
------END GEEK CODE BLOCK------
Addio Dani, sono più ricco perchè ti ho conosciuto
Avatar utente
thrantir
Moderatore
Moderatore
 
Messaggi: 8897
Iscritto il: 27 mag 2003, 13:32
Località: Pisa


Torna a Programmare

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite

cron