Aggiunta di un carattere in una stringa

di il
5 risposte

Aggiunta di un carattere in una stringa

Salve a tutti , sto cercando di risolvere il seguente problema: "data una stringa di caratteri, lunga al massimo 300 caratteri, inserire il carattere * (asterisco) dopo ogni lettura del carattere A che si trova in essa e far stampare la stringa così ottenuta". Ho pensato che per aggiungere tale carattere ' * ' dopo la lettera A ,bisogna spostare tutti gli elementi di una posizione, (compreso il carattere nullo di fine stringa), così da liberare
l' elemento che segue tale lettera ,per aggiungere l'asterisco. Ho scritto il seguente codice, ma quando lo vado ad eseguire non funziona.

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define card 300
   

   main()
 {
    char Vet[card],c;
    int i=0,j, riemp=0;
    int pos=0;
   
    //inserimento stringa
   
    printf("inserisci stringa\n\n");
   
    while((c=getchar())!='\n'&&i<card ){
             		Vet[i]=c;
                    i++;    
                    riemp++;         	
				
                 }
              Vet[i]='\0';
          
         //inserimento del carattere asterisco 
         
          for(i=0;i<riemp;i++){
                    if(Vet[i]=='a'){
                         pos=(i+1);
                              if(pos<card){
                                    for(j=(riemp+1);j>=pos;j--)
                                       Vet[j]=Vet[j+1];}
                                       Vet[pos]='*';
                                       riemp++;          
                              }
                         }
                         
   //stampa stringa modificata
   i=0;
    while(Vet[i]!='\0'){
       printf("%c",Vet[i]);
       i++;
       }
    
    
   system("Pause");  
    
   } 

5 Risposte

  • Re: Aggiunta di un carattere in una stringa

    Si tratta di una semplice operazione di shifting.
    innanzi tutto, per ottenere la dimensione attuale della stringa, puoi usare la funzione strlen di string.h, che ti restituisce il numero di caratteri contenuti all'interno della stringa (il numero attuale, non il massimo!).
    dopodiché fai un ciclo for che va fino al termine della stringa (i < strlen(string)) e controlla se string == 'a'. se sì, richiama la funzione shifting, che dovrà spostare a destra di una posizione tutti gli elementi fino alla fine dell'array, e inserire nel "buco" (i + 1) l'asterisco.

    un'altra soluzione che (forse) potrebbe essere migliore, è scorrere subito l'array e memorizzarsi in un array di interi ogni posizione in cui appare la lettera a. successivamente farai un for che andrà avanti fino alla fine di quest'array di interi e partendo da ogni posizione verrà effettuato uno shifting verso destra. questa soluzione potrebbe essere più utile della precedente, in quanto così facendo potresti controllare che la stringa finale non contenga più di 300 caratteri.

    ti consiglio vivamente di disegnarti l'array e provare a cimentarti nello shifting da solo: è una funzione piuttosto frequente negli esercizi scolastici, per cui è meglio impararla da soli e ricordarsi il ragionamento piuttosto che copiare brutalmente del codice.
  • Re: Aggiunta di un carattere in una stringa

    Grazie per l'aiuto, la seconda soluzione che mi hai proposto in un certo senso non è la stessa che ho scritto io nel programma ? Con un primo ciclo for individuo il carattere 'a' poi con un secondo ciclo for eseguo lo shifting verso destra di tutti i caratteri dopo la lettera 'a' , ma non riesco a capire dove sbaglio .
  • Re: Aggiunta di un carattere in una stringa

    Direi che la cosa più semplice è contare quante 'a' hai nel vettore inserito, allocarne uno nuovo con la dimensione del vecchio vettore più il numero delle 'a' trovate più uno per il terminatore e, ricopiare il vecchio vettore nel nuovo dove: quando nel ciclo di ricopiatura viene trovata la a viene copiato nel nuovo vettore anche il carattere *.
  • Re: Aggiunta di un carattere in una stringa

    Ok allora provo in questo modo, sembra più facile come procedimento , grazie !!
  • Re: Aggiunta di un carattere in una stringa

    Memmove() penso possa fare al caso tuo.
    ad esempio qui linea 187
Devi accedere o registrarti per scrivere nel forum
5 risposte