Oppure

Loading
27/07/12 22:01
Dice
Volevo chiedervi aiuto per un problema: devo sostituire un elemento di un array con più caratteri.
Vi faccio un esempio:

array originale: exoyezP(x, y, z)

array modificato: exoyezP(x, y, f(y))

Non mi fate altri esempi diversi, concentriamoci solo su un esempio se possibile, senno si crea troppa confusione secondo me.

Come potrei fare ?
aaa
28/07/12 8:23
torn24
ciao , ho letto la discussione precedente che ti hanno chiuso ,

la risposta alla domanda :

"è possibile sostituire un elemento di un array di caratteri, con una serie di caratteri ? "

La risposta è NO ! un array di char , può contenere per ogni indice solo un
char , un carattere .


da qui , ti hanno proposto di sostituire l'array di char , con una matrice di char

che può contenere per ogni indice , una serie di caratteri , ma anche una stringa formata da un singolo carattere .

per modificare gli elementi della matrice , dovrai usare funzioni stringa come
strcpy();

aaa
28/07/12 8:34
Umberto
Nel post di prima ti stavo spiegando questo ma ti spiegavo anche come mantenere il pezzo prima
aaa
29/07/12 19:58
Dice
Vi potrà sembrare veramente stupido, ma...
... io veramente non ho ben capito cosa mi volete dire;

mi avete consigliato di usare le funzione per copiare e concatenare le stringhe, però non posso agire in quel modo, perchè nel programma che devo fare non posso sapere a priore dove si trovi il carattere da sostituire.

Come potrei agire in altro modo ?
aaa
29/07/12 22:21
Umberto
in che senso non puoi sapere a priori ??
aaa
29/07/12 23:52
Dice
Vuol dire che io non posso dirli direttamente: copia i primi tot caratteri qui, e concatena tot caratteri qua;
allora, il fatto è questo: io sto cercando di fare l'algoritmo di skolemizzazione (se non sapete qual è, guardate su wikipedia, che è fatto molto bene, ma ricordatevi che dei 4 punti che ci sono io devo fare solo il punto 3 e il punto 4).
Fino a pochi giorni fa, riuscivo ad andare avanti con il mio progetto, ma adesso sono arrivato ad un punto ceco... ho il blocco dello scrittore :(

io sono riuscito a fare il caso in cui un quantificatore esistenziale preceda un quantificatore universale, e fin qui non ho problemi, ho gia fatto tutto.
Il problemo c'è l'ho quando un quantificatore universale precede un quantificatore esistenziale, perchè in questo caso devo andare a sostituire tutte le occorrenze di un certo carattere con la stringa f(x) (dentro alle parentesi ci potrebbero essere anche due variabili).
Io avevo pensato e sono mezzo riuscito a farlo, con una serie di istruzioni del tipo: v[i+1] = '('; v[i+2] = 'nuovavariabile'; v[i+3]= ')'
Teoricamente funziona, però solo nel caso la variabile che devo sostituire sia l'ultima :(
in caso contrario, mi stampa si il vettore, ma perdendo dei pezzi.

Come potrei risolvere ? vi chiedo adesso
aaa
30/07/12 7:36
torn24
Ciao , ho visto l'algoritmo e non lo capito , mi sembra anche un po complicato :asd:
comunque se il tuo scopo , è inserire una particolare stringa in una posizione
di un array , la soluzione è sempre di usare array multidimensionali di char
l'uso per i singoli caratteri è un po fastidioso , rispetto ad un normale array di
char , ma ti permette di fare quello che chiedi .

ti posto un esempio di uso matrice con singoli caratteri e con stringhe
se lo guardi un po non è complicatissimo il loro uso ;)


#include <stdio.h>
#include <stdlib.h>
#define numero_stringhe 100
int main(int argc, char *argv[])
{
  int i,j;
  char stringa[100];
  char matrix[numero_stringhe][20];
//creo posto per 100 stringhe da 20 caratteri
 
  
  //chiedo in ingresso una stringa
  puts("inserisci al massimo 100 caratteri");
  gets(stringa);
  //con l'uso di strncpy divido la stinga
  // in stringhe di un carattere
  // e le inserisco in matrix
  for(i=0;stringa[i]!=0;i++)
  {
      strncpy(matrix[i],stringa+i,1);
      matrix[i][1]=0;
      }
  
    for(j=0;j<i;j++)      
        printf("%s\n",matrix[j]);//stampo la matrice
        
  //se la stringa 2 è uguale a c 
  // la sostituisco con la stringa f(x)      
   if(strcmp(matrix[2],"c")==0)
   {
         strcpy( matrix[2],"f(x)");//sostituisco un "carattere" con una stringa
         
         for(i=0;i<5;i++)     //stampo la matrice     
             printf("%s\n",matrix[i]); 
    }      
  system("PAUSE");	
  return 0;
}













aaa