Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #define N 300
- int main(){
- char frs[N]; /*SECONDO VETTORE ISTANZIATO ALLA RIGA 21*/
- int i, h, g, fineVettore;
- /*BLOCCO PER RIEMPIRE IL VETTORE*/
- printf("Inserisci la frase (Max %d caratteri):\n", N);
- for(i = 0; i < N; i++){
- scanf("%c", &frs[i]);
- if(frs[i] == '\n'){
- frs[i] = '\0';
- fineVettore = i;
- i = N;
- }
- }
- /*Soltanto ora che conosco quant'è lunga la stringa creo il
- vettore dei doppioni, così occupo meno spazio in memoria. Il
- vettore dei doppini è lungo quanto l'altro vettore, perchè
- a priori non posso sapere se sono tutte diverse.*/
- char dopp[fineVettore];
- /*AZZERA IL VETTORE DEI DOPPIONI*/
- for(i = 0; i < fineVettore; i++){
- dopp[i] = 0;
- }
- /*BLOCCO CHE SCANDISCE LA FRASE e se trova doppioni aggiorna la
- //posizione corrispondente nel vettore doppioni*/
- for(i = 0; i < fineVettore; i++){
- for(h = i; h < fineVettore; h++){
- if (frs[i] == frs[h]){
- /*Controllo se per caso non ho già analizzato
- precedentemente quella lettera; considero come caso
- predefinito che io non l'abbia ancora fatto, mettendo
- una variabile di controllo (nuovo) = 1. Se però grazie
- al ciclo con g mi accorgo che l'ho già trovata, nuovo
- diventa 0 segnalandolo. Così il posto corrispondente
- del vettore dei doppioni si aggiorna soltanto se nuovo
- è uguale a 1. */
- int nuovo = 1;
- for(g = 0; g < i; g++){
- if(frs[i] == frs[g]){
- nuovo = 0; //C'era già!
- }
- }
- if (nuovo == 1){
- dopp[i] += 1;
- }
- }
- }
- }
- //BLOCCO CHE STAMPA IL RISULTATO FINALE PER L'UTENTE
- for(i = 0; i < fineVettore; i++){
- if(dopp[i] > 1){
- printf("L'elemento %c, alla posizione %d, si ripete %d volte.\n",
- frs[i], i, dopp[i]);
- }
- }
- printf("\n NOTA: le lettere minuscole sono considerate diverse dalle maiuscole.\n");
- }
Advertisement
Add Comment
Please, Sign In to add comment