PROBLEMA rimozione caratteri desiderati di una stringa tramite un array di caratteri

Pubblicità
Come detto da Andretti sopra, 2 loops.

C++:
#include <iostream>
using namespace std;
int main()
{
    char word[] = "Hell.o W@orld";
    char badSymbols[] = ".@[]{}()";

    //controlla ogni caratter
    for (char* currentChar = word; *currentChar != '\0' ; currentChar++)
    {   //controlla contro ogni simbolo
        for (char* symbol = badSymbols; *symbol != '\0'; symbol++)
        {
            //se un carattere indesiderato viene trovato
            if (*currentChar == *symbol) {
                //rimuovilo
                char* next = currentChar;
                while (*next != '\0') {
                    *next = *(next + 1);
                    next++;
                }
            }
        }
    }

    for (char* ch = word; *ch != '\0'; ch++){
        cout << *ch;
    }

    return 0;
}

nel codice che rimuove, puoi anche risparmiare una linea scrivendo questo (anzichè next++ in una linea separata)
C++:
while (*next != '\0'){
       *next++ = *(next + 1);
}

ho problemi con il codice nel main richiamo la funzione rimuovistringa(stringa);
dove stringa è un array di caratteri;
nella funzione gli passo un puntatore a caratteri;
ma non la stampa la stringa
 
questo è il codice
Concordo, ho citato la cosa più per mostrargli una cosa che suppongo non sappia, ma non piace neppure a me una linea di codice simile xD
Esatto, ecco perche' consigliavo l'uso di un buffer, si usa il doppio della memoria ma fila via molto più liscio.
Codice:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

    void rimuovi_caratteri(char *strpointer);


    void rimuovi_caratteri(char *strpointer)
{
    char ch[]= ".;][}{()";


    // puntatore che punta a ch/
    char *chpointer;


    chpointer = ch;


    //puntatore che punterà all'elemento dell'array nel main che conterrà il carattere da eliminare//

    char *removechr;





  
       //controllo caratteri dell'array nel main//

    while(*strpointer != '\0')
  
    {
        while(*chpointer != '\0')

        {
            if(*strpointer == *chpointer)

            {

                // se i caratteri confrontati sono uguali allora removechr punterà al carattere indesiderato//

                removechr = strpointer;

                while(*removechr != '\0')

                {
                    *removechr = *(removechr + 1);

                    removechr++;


                }


          
          
          
            }

        }

    }

          
}



      


                int main()

            {  
                char stringa[] = "c[) iao";

                int i;


                int dim;

                dim =strlen(stringa);

              
              
            rimuovi_caratteri(stringa);

            for ( i=0;i<dim;i++)
              
            {

                printf("%c",stringa[i]);


            }

;

                printf("\n");

                return 0;
            }
 
Domanda: in che modo tutte quelle linee vuote una dietro l'altra stanno contribuendo a rendere il tuo codice più leggibile?
Non so che monitor usi, ma nel mio devo "scrollare" più di una volta (ben cinque) per poter vedere il tuo codice, il che non aiuta, sopra tutto se chiedi ad altri di leggerlo :/
Inoltre ripeto il punto uno che ho scritto nella pagina 1, non ti serve avere la dichiarazione ("signature") della funzione seguita dalla definizione della stessa.
La definizione è sufficiente.

la linea sotto non serve
C:
void rimuovi_caratteri(char *strpointer);
 
Ultima modifica:
Domanda: in che modo tutte quelle linee vuote una dietro l'altra stanno contribuendo a rendere il tuo codice più leggibile?
Non so che monitor usi, ma nel mio devo "scrollare" più di una volta (ben cinque) per poter vedere il tuo codice, il che non aiuta, sopra tutto se chiedi ad altri di leggerlo :/
Inoltre ripeto il punto uno che ho scritto nella pagina 1, non ti serve avere la dichiarazione ("signature") della funzione seguita dalla definizione della stessa.
La definizione è sufficiente.

la linea sotto non serve
C:
void rimuovi_caratteri(char *strpointer);
Per me è buona abitudine farlo
 
bhe mi sembra un pò come dire che è buona abitudine scrivere:
C++:
int x;

x = 0;
quando puoi ugualmente scrivere:
C++:
int x = 0;

Semplicemente più linee da valutare (che in questo caso non aggiungono nulla di utile) per chi ora o in futuro dovrà leggere il tuo codice. Se non fai questo cambiamento per te, suggerisco di farlo per gli altri, sopratutto se si richiede agli altri di leggerlo, tienilo il più essenziale/compatto/comprensibile possibile :)
 
Ultima modifica:
Pubblicità
Pubblicità
Indietro
Top