Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [C] replace con array di char

    Salve a tutti, ho un problema per implementare una funzione replace come quella della classe string di C++.
    codice:
    char *replace(char *w, int i, int j, char *s)
    {
    	char *temp = malloc((strlen(w)+j-1)*sizeof(char));
    	int k=0; int a=0;
    	while(k<i)
    	{
    		char t[2] = {w[k], 0};
    		strcat(temp, t);
    		k++;
    	}
    	for(a=0; a<j;a++)
    	{
    		char tt[2] = {s[a], 0};
    		strcat(temp, tt);
    	}
    	k+=1;
    	for(k; k<strlen(w);k++)
    	{
    		char ttt[2] = {w[k], 0};
    		strcat(temp,ttt);
    	}
    	return temp;
    }
    Io ho scritto questo codice però mi dà qualche problema e sinceramente nn riesco a capire perchè. :master:
    La funzione dovrebbe funzionare in modo da sostituire j caratteri (i primi j di s) sulla stringa w a partire dall'indice i.
    Però per esempio con w = aabbBC, s=bb, i=3 e j=2 mi restituisce aabbbBC invece di aabbbC, in pratica applicare questa produzione bB->bb sulla stringa w.
    Grazie

    Ciao ciao

  2. #2
    Prima dell'ultimo ciclo for devi incrementare la variabile k di j e non di 1.
    Sul tuo esempio funziona, su altri casi non so, anche perché non credo di aver compreso fino in fondo il perché di quei cicli. :master:

    Ma se puoi usare le funzioni in string.h... sarà che io son pigro, ma...
    Codice PHP:
    char *replace(char *wint iint jchar *s)
    {
        
    char *risultato = (char*) malloc(strlen(w)*sizeof(char));

        
    strcpy(risultatow);
        
    strncpy(risultato isj);

        return 
    risultato;

    Assumendo che l'input sia corretto, in caso contrario non so come si comportino strcpy() e strncpy().

  3. #3
    Originariamente inviato da babel.91
    Prima dell'ultimo ciclo for devi incrementare la variabile k di j e non di 1.
    Sul tuo esempio funziona, su altri casi non so, anche perché non credo di aver compreso fino in fondo il perché di quei cicli. :master:

    Ma se puoi usare le funzioni in string.h... sarà che io son pigro, ma...
    Codice PHP:
    char *replace(char *wint iint jchar *s)
    {
        
    char *risultato = (char*) malloc(strlen(w)*sizeof(char));

        
    strcpy(risultatow);
        
    strncpy(risultato isj);

        return 
    risultato;

    Assumendo che l'input sia corretto, in caso contrario non so come si comportino strcpy() e strncpy().
    Questa funzione non è corretta, forse mi sono spiegato male io qual'è l'obiettivo. Comunque ho trovato la solzione al problema originale (cioè ricreare una substr come quella del C++), ed il codice è:
    codice:
    void replace(char *w, int i, int j, char *s)
    {
    	char *temp = (char *)malloc((strlen(w)+j-1)*sizeof(char));
    	int k=0; int a=0;
    	while(k<i)
    	{
    		char t[2] = {w[k], 0};
    		strcat(temp, t);
    		k++;
    	}
    	strcat(temp,s);
    	k = k+j;
    	for(k; k<strlen(w);k++)
    	{
    		char ttt[2] = {w[k], 0};
    		strcat(temp,ttt);
    	}
    	w = (char *)realloc(w,(strlen(w)+j-1)*sizeof(char));
    	strcpy(w,temp);
    	free(temp);
    }
    adesso la funzione è void in quanto agisce direttamente sulla stringa w (che sarebbe la stringa chiamante della controparte C++).


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.