Linguaggio C, modificare una stringa

di il
12 risposte

Linguaggio C, modificare una stringa

Ciao a tutti, sono tre giorni che impazzisco perchè non capisco come io possa procedere, premetto che sono un novellino nel settore e sto studiando per l'esame all'università ma incontro ancora parecchi problemi.
Un esercizio che mi è capitato mi chiedeva di leggere da tastiera una stringa, ad esempio "chioccia" e scrivere un programma in cui andavo a correggere il 'ch' con 'k' ed eventuali doppio dovevano diventare singole, nell'esempio precedente ''chioccia'' avrebbe avuto come risultato ''kiocia''.
è presente qualche funzione stringa che può aiutarmi o in alternativa come posso procedere?

12 Risposte

  • Re: Linguaggio C, modificare una stringa

    No... devi esaminare carattere per carattere e fare le sostituzioni. Ovviamente all'interno di un opportuno ciclo. Cosa hai scritto in questi 3 giorni?
  • Re: Linguaggio C, modificare una stringa

    Temo servirà scandire l'intera stringa e testare le coppie di caratteri
    Inoltre 'tirare indietro' di uno la parte residua della stringa ogni volta che si verifica la condizione

    Nulla di difficile, giusto una decina di righe per ogni caso da sostituire, ipotizzo
  • Re: Linguaggio C, modificare una stringa

    Ho utilizzato un ciclo for per scandire la stringa e trovare i carateri s1 ed s1[i+1] di interesse, ma arrivato a questo punto del codice non riesco a capire nè come ''tirare indietro di uno''.
    dopo aver trovato i caratteri di interesse e aver salvato la loro posizione in ''cont=s1'', se provo ad usare nuovamente un ciclo for del tipo

    for(i=0;i<cont;i++){
    s2==s1
    }

    mi viene detto che questa istruzione non ha nessun effetto, quindi non posso fare così per copiare la parte di stringa che
    mi interessa, mentre un strcpy sarebbe inutile perché mi copierebbe anche la parte di stringa che non mi serve
  • Re: Linguaggio C, modificare una stringa

    Guarda, per fare la prima metà (doppioni) ci ho messo pochi minuti, la seconda è pressoché identica....

    Tu forse stai pensando in termini di stringhe
    Devi pensare in termini di elementi di array

    Metti comunque qui quello che hai scritto
    Che compili, mi raccomando,
    Completo di main, include e tutto il circo
  • Re: Linguaggio C, modificare una stringa

    Scusa ma nel tuo ciclo s1 e s2 cosa sono? Non stai scandendo nessuna stringa ...

    E conosci la differenza tra == e = ?

    Hai le basi del linguaggio? Altrimenti altro che tre giorni ...
  • Re: Linguaggio C, modificare una stringa

    #include <stdio.h>
    #include <stdlib.h>
    #define N 20
    int main()
    {
    char s1[N];
    int i, l, j;
    i=0;
    printf("s1=\n");
    do{
    s1=getchar();
    i++;
    }
    while((i<N)&&(s1[i-1]!='.'));
    l=i;
    for(i=0;i<l;i++){
    if((s1)=='c'&&(s1[i+1]=='h')){
    s1='k';
    s1[i+1]=s1[i+2];
    }
    }

    for(i=0;i<l;i++){
    putchar(s1);
    }
    return 0;
    }
    ok grazie al tuo consiglio sono riuscito a fare qualche passo avanti ragionando su vettori e non su stringhe, ora immettendo una parola come ''alchimia'' il risultato è ''alkiimia'', purtroppo ora non riesco a capire come posso fare per eliminare il carattere in più
  • Re: Linguaggio C, modificare una stringa

    Sarebbe utile usare i tag code

    Comunque, se dal punto in cui sei arrivato cicli il vettore fino alla fine scrivendo s[ i ] = s[ i + 1] (chissà come mai ho messo gli spazi tra le quadre....)

    E il suggerimento finisce qui

    Adesso un'idea:

    Sicuro che l'array di caratteri sia sempre pieno?
  • Re: Linguaggio C, modificare una stringa

    If ( ( s1 [ i ] ) == 'c' && ( s1 [ i + 1 ] == 'h' ) ) {
    s1 [ i ] = 'k' ;
    for ( j=i ; j<l ; j++ ) {
    s1 [ j + 1 ] = s1 [ j + 2 ] ;
    }
    }
    sono riuscito ad arrivare alla soluzione definendo un altro indice ''j'' per un for annidato all'if che avevo già scritto, mi ero avvicinato ma ne mancava un pezzo, grazie mille per il consiglio giusto

    Non capisco cosa intendi con la tua domanda però, il mio array non è pieno ma riempito fino a quando non inserisco un '.' da tastiera, a meno che non raggiunga i N caratteri e allora in quel caso sarebbe pieno no?
  • Re: Linguaggio C, modificare una stringa

    Bravo

    Però i tag code servono per non impazzire a scrivere il programma in maniera che si legga sul forum


    La domanda invece significa:

    E se avessi parole più corte?
    Come fai a fermarti?
  • Re: Linguaggio C, modificare una stringa

    do{
    s1=getchar();
    i++;
    }
    while((i<N)&&(s1[i-1]!='.'));
    probabilmente non lo hai notato perchè non ho usato i tag code (che ho scoperto pacioccando un po') ed era poco comprensibile
    il ciclo do-while però mi serve proprio a questo, come ti dicevo prima la mia getchar si ferma quando raggiungo N caratteri oppure quando inserisco un carattere '.' 'tastiera
  • Re: Linguaggio C, modificare una stringa

    Oh no, lo avevo notato

    Ma siccome non va bene...

    Domanda:

    In c come sono terminate le stringhe?
  • Re: Linguaggio C, modificare una stringa

    \0, però non saprei come inserirlo nella condizione del mio while, basta sostituire '.' con '\0'?
    mi confonde perchè si tratta di due input che do tramite tastiera e non sono sicuro possa funzionare così
Devi accedere o registrarti per scrivere nel forum
12 risposte