Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    Vettori di stringhe...problemi!

    Ciao a tutti, ho il seguente problema:

    "Si scriva un programma che legga una sequenza di parole corrispondenti a nomi di città. ogni nome puà essere lungo massimo 20 caratteri e la sequenza di acquisizione si conclude con la parola FINE. La sequenza può contenere al massimo 100 città. Richiamare una funzione che calcola il numero di occorrenze per ogni città."

    come faccio a leggere n nomi di città se non so quante variabili dichiarare?Grazie

  2. #2

    Re: Vettori di stringhe...problemi!

    Di variabile ne dichiarerai solo una, che sarà un array; per le sue dimensioni, sai che al massimo ti potranno essere date 100 città, al massimo di 20 caratteri ciascuna, per cui
    codice:
    char ArrayCitta[100][20];
    .
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    grazie, così è giusto?
    #include<stdio.h>

    int main()
    {
    char arraycitta[100][20];
    int i=0;
    for(i=0;i<100;i++)
    {
    printf("Inserire il primo nome >\n");
    scanf("%s", &arraycitta[i][20]);
    }

    return 0;
    }

    ma perchè funziona solo se metto il & sia nella printf che nella scanf?Su questo array posso eseguire le operazione classiche delle stringhe?Grazie mille

  4. #4
    Originariamente inviato da zionico90
    grazie, così è giusto?
    No, è così:
    codice:
    #include<stdio.h>
    
    int main()
    {
        char arraycitta[100][20];
        int i=0;
        for(i=0;i<100;i++)
        {
            printf("Inserire il primo nome >\n");
            scanf("%s", arraycitta[i]);
        }
        return 0;
    }
    .
    ma perchè funziona solo se metto il & sia nella printf che nella scanf?
    Eh?
    Su questo array posso eseguire le operazione classiche delle stringhe?Grazie mille
    Vedila così: ogni riga di quell'array è una stringa di 20 caratteri; regolati di conseguenza.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    grazie gentilissimo ;-)!Finalmente ho capito! ora scrivo e ti faccio sapere!

  6. #6
    Come sintassi mi sembra corretto:

    #include<stdio.h>
    #include<string.h>
    void occorrenze(char citta[][20]);

    int main()
    {
    char arraycitta[5][20];
    int i=0;

    for(i=0;i<5;i++)
    {
    printf("Inserire il primo nome (es: TORINO): >\n");
    scanf("%s", arraycitta[i]);
    }
    occorrenze(arraycitta);

    return 0;
    }

    void occorrenze(char citta[][20])
    {
    int i=0,j=0,occorrenza=0;
    for(i=0;i<5;i++)
    {
    for(j=0;j<5;j++)
    {
    if(citta[i]==citta[j])
    {
    occorrenza++;
    }
    }
    printf("\n\n%s %d\n\n", citta[i],occorrenza);
    }
    }

    purtroppo quando lo lancio e ad esempio do in input:

    ROMA TORINO PALERMO ROMA TORINO

    mi stampa:

    ROMA 1
    TORINO 1
    PALERMO 1
    ROMA 1
    TORINO 1

    invece di:

    ROMA 2
    TORINO 2
    PALERMO 1

    come mai?Inoltre come faccio per fermare l'inserimento con la stringa FINE?Inserisco un ciclo while o if alla riga 12??Grazie

  7. #7
    Le stringhe si confrontano con strcmp, non con ==. Per stoppare al fine, usa la funzione in questione abbinata ad un if, oppure come condizione di un while.
    Amaro C++, il gusto pieno dell'undefined behavior.

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,326

    Moderazione

    Leggi anche il Regolamento interno per le modalità di posting: titoli, codice e quant'altro.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.