C, Trasformare una stringa in un array di caratteri

di Anonimizzato14377 il
10 risposte
Vorrei scrivere un codice in C, in modo tale che all'utente venga chiesto di inserire una parola od una frase, senza "limiti" di lunghezza. Una volta inserita, vorrei che ogni carattere della stringa (compreso lo spazio) venisse memorizzato in una cella di un array di strighe.

Ebbene, esiste un operatore che "spezzi" la stringa in ogni carattere (in Python è possibile una cosa del genere, se non sbaglio)? In modo tale, che la quantità degli elementi divisi, diventi la lunghezza dell'array da allocare dinamicamente.

Sto cercando di fare in questo modo perché ho provato a scrivere un codice, che data una lunghezza iniziale inserita dall'utente, mi crei un'array dinamico della dimensione digitata:

#include <stdio.h>
#include <stdlib.h>
int main()
{
	char *s; //Dichiarazione array
	int dim; //Dimensione per allocazione dinamica della memoria
	int i; //Indice di scorrimento
	
	printf("Dimensione della stringa? ");
	scanf("%d", &dim);
	
	s = malloc(dim*sizeof(char));
	
	//Caricamento dati
	printf("\nInserire una lettera alla volta\n");
	for(i = 0; i < dim; i++)
	{
		printf("s[%d] = ", i);
		scanf("%c", &(s[i]));
	}
	
	return 0;
}
La compilazione non da problemi, ma guardate cosa succede quando lo eseguo:

Dimensione della stringa? 5

Inserire una lettera alla volta
s[0] = s[1] = e
s[2] = s[3] = r
s[4] =


E termina il programma.

10 Risposte

  • Ok, dunque devo utilizzare il getchar(); Il fatto è che non so come si usa.

    Se ho capito, con getchar() se inserisco abc, mette in memoria 'a', 'b', 'c'. Corretto?

    Ma come inserisco più di un carattere insieme? Una variabile di tipo char può contenere al massimo un solo byte, e quindi un solo carattere alla volta.

    Potresti farmi un piccolo esempio? Grazie
  • No, non hai capito.

    Il suggerimento riguardava l'inserimento del ciclo while con la getchar dopo la scanf per svuotare il buffer.
  • Ma a me non serve questo.. O sì?
  • O sì !
  • In questo caso potresti anche risolvere con

    scanf("%c\n", &(s));
  • Ho provato così, come vedi nel codice che ho postato sopra. Ma mi da quell'errore che ho evidenziato in grassetto.

    Io vorrei semplicemente scrivere un codice che, inserita una stringa da input (senza chiedere all'utente la lunghezza di tale stringa prima dell'inserimento stesso) venga allocato (dinamicamente) un array contente in ogni sua cella rispettivamente ogni lettera, compreso lo spazio, della stringa.

    Esempio, in un colpo solo inserisco: "ciao". Dunque viene allocato dinamicamente un array: {'c', 'i', 'a', 'o' }

    Ora, sono due le cose che ancora non ho capito come fare:
    1 - Come faccio ad inserire in un colpo solo più di un carattere, cioè una stringa? Con il getchar()?
    2 - Ok, ma qual è la sintassi del getchar()? Come si usa? è tutta la mattina che sto cercando un esempio pratico, ma non riesco a trovarlo!

    Grazie ancora
  • Ciao, ti posto un esempio. Non è perfetto, anche perché usa la deprecata gets, però può essere un punto di partenza.
    
    #include <stdio.h>
    #include <stdlib.h>
    #define MAX_SIZE 100
    
    int main(int argc, char* argv[])
    {
    	char stringa[MAX_SIZE];
    	printf("Inserire una stringa: ");
    	gets(stringa);
    	
    	int i=0;
    	while(stringa[i] != '\0')
    	{
    		printf("%c\n", stringa[i++]);
    	}
    	
    	return 0;
    }
    
  • Perfetto, era questo che mi serviva! Grazie mille!!!
  • No ... usa la fgets.
Devi accedere o registrarti per scrivere nel forum
10 risposte