Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    C# - Aiuto Confronto stringhe di caratteri in liste usando i puntatori

    Salve vorrei sapere se data
    struct listaTreniMerci2 {
    char nome[40];
    char sequenza[40];
    struct listaTreniMerci2 *next;
    };


    struct listaTreniMerci2 *treniMerci2, *sequenze;

    la procedura così realizzata
    void somiglianza(char * alfa, char *beta){
    struct listaTreniMerci2 *tmp, *tmp2;
    int result;
    char alfa_tmp[40], beta_tmp[40];
    tmp=treniMerci2;
    tmp2=treniMerci2;
    if((tmp != NULL) && (strcmp(tmp->nome,alfa) !=0)){
    printf(">Non è presente il primo treno! \n");
    return;
    }
    if((tmp2 != NULL) && (strcmp(tmp2->nome, beta)!=0)){
    printf(">Non è presente il secondo treno! \n");
    return;
    }
    alfa_tmp= tmp->sequenza;
    beta_tmp= tmp2->sequenza;
    result = strcmp (alfa_tmp, beta_tmp)
    printf(">%d\n",result);

    }
    che confronta due treni della struttura sul membro nome, se sono presenti entrambi allora passa al confronto dei membri sequenza dei due diversi valori e restituisce il numero di caratteri iniziali uguali per entrambi. cioè
    esempio
    dato il valore nome= alfa sequenza=AAIUO
    dato il valore nome=beta sequenza=AAIO
    all'interno della lista per come ho realizzato la procedura
    avrò come risultato 3 cioè i caratteri iniziali uguali tra le due sequenze.
    o come devo fare ho utilizzato due puntatori ma nn so come far puntare uno puntatore solo al membro sequenza in relazione al membro alfa e l'altro
    puntatore solo al membro sequenza in relazione al membro beta
    grazie

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Ma non stiamo parlando di C# ...

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

    Moderazione

    Appunto... questo non è C#... e se fosse un problema di C# saresti nella sezione abagliata, visto che ne esiste una apposita per tutti i linguaggi del .NET Framework...

    Mi sa che hai un po' di confusione in testa... questo è C.

    Modifico il titolo.


    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

  4. #4
    qualcuno sa dare una risposta al mio quesito perfavore
    grazie

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Non ti sembra che dovresti intervenire per chiarire un attimo di quale linguaggio stiamo parlando ?

    E detto questo ... chiarisci il problema perche' da quello che hai scritto non si capisce nulla e il codice non e' formattato correttamente per essere letto con comodita' ...

    In poche parole ... cosi' come hai presentato il problema, non avrai molto aiuti ...

  6. #6
    Non ho capito bene lo scopo del programma.
    Se lo dicessi si potrebbe vedere come scrivere il programma...
    (Premettendo che io so il C/C++, ma il C# no)
    printf("Programmazione in C!");
    cout<<"Programmazione in C++!";

  7. #7
    ok ansi-c è il linguaggio del programma
    allora la procedura smiglianza prende in input due char che corrispondono al membro nome della struct, per due valori diversi. se esistono questi due valori all'interno della lista devo
    prendere il membro sequenza relativo al valore legato a membro nome= alfa e confrontarlo con
    il membro sequenza relativo al valore legato a nmebro nome =beta e restituire un intero in result tale che indichi il massimo numero dei primi n caratteri comuni alle due sequenze
    quindi esempio
    se nome è alfa e sequenza AAIUO del primo elemento e
    se nome è beta e sequenza AAIO del secondo elemento
    vorrei ottenere 3(cioè i 3 caratteri AAI il max numero dei primi caratteri uguali delle due sequenze)
    solo che nn sono sicura sui puntatori
    grazie

  8. #8
    spero che qualcuno possa aiutarmi

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da amanda88
    spero che qualcuno possa aiutarmi
    Probabilmente non hai aiuti, come ti dicevo, perche' il quesito e' molto confuso.

    Il codice che hai mostrato utilizza parti sicuramente sbagliate, come

    alfa_tmp= tmp->sequenza;
    beta_tmp= tmp2->sequenza;

    e come il fatto che NON utilizza mai gli argomenti alfa e beta passati.

    Inoltre utilizza variabili globali (i puntatori struct listaTreniMerci2 *treniMerci2, *sequenze) che non si sa come sono inizializzati e quando.

    Questo rende impossibile esaminare il tuo codice e nessuno ci prova.

    Il mio consiglio e' di inviare, oltre al codice della funzione, anche quello del main (e tutto quello che serve) che utilizza la funzione somiglianza. Fornisci anche un esempio di dati in input e in output CHIARA.

    E SOPRATTUTTO inserisci il codice tra i tag [ CODE ] usando l'apposito tasto # del forum.

    Fatto questo, tentero' di dare un'occhiata ...

  10. #10

    aiuto

    ok allora mi spiego meglio data
    # include<stdio.h>
    # include<stdlib.h>
    # include<time.h>
    # include<string.h>

    /*
    STRUTTURA DATI CHE IMPLEMENTA I TRENI MERCI
    */
    struct listaTreniMerci2 {
    char nome[40];
    char sequenza[40];
    struct listaTreniMerci2 *next;
    };

    /*
    PUNTATORI ALLA LISTA CONTENTE I TRENI
    */
    struct listaTreniMerci2 *treniMerci2, *sequenze;
    /*
    Funzione inserisci
    Questa funzione inserisce nella lista dei treni un nuovo treno, il cui nome e
    la cui struttura sono definiti dalla stringa passata in input, restituendo il
    puntatore alla lista dei treni.
    Nel caso sia già presente un treno dello stesso nome di quello passato dalla
    stringa di input non viene compiuta alcuna operazione.
    */
    struct listaTreniMerci2 *inserisci(char *alfa, char *w, struct listaTreniMerci2 *tmp){
    struct listaTreniMerci2 *p1, *p2, *t;
    t=(struct listaTreniMerci2 *)malloc(sizeof(struct listaTreniMerci2));
    strcpy(t->nome, alfa);
    strcpy(t->sequenza, w);
    t->next=NULL;
    if (tmp == NULL)
    return(t);
    p1=tmp;
    p2=tmp;
    while (p1 != NULL && (strcmp(p1->nome, alfa) != 0)) {
    if (strcmp(p1->sequenza, w) > 0) {
    if (p1 == tmp) {
    t->next=p1;
    tmp=t;
    return(tmp);
    }
    else {
    while (p2->next != p1)
    p2=p2->next;
    t->next=p1;
    p2->next=t;
    return(tmp);
    }
    }
    else
    p1 = p1->next;
    }
    if (p1 == NULL){
    while(p2->next != NULL)
    p2=p2->next;
    p2->next=t;
    }
    return(tmp);
    }
    /*
    Procedura somiglianza
    Stampa il grado di somiglianza dei treni di nome alfa e beta.
    */
    /*void somiglianza(char * alfa, char *beta){
    struct listaTreniMerci2 *tmp, *tmp2;
    int result;
    char alfa_tmp[40], beta_tmp[40];
    tmp=treniMerci2;
    tmp2=treniMerci2;
    if((tmp != NULL) && (strcmp(tmp->nome,alfa) !=0)){
    printf(">Non è presente il primo treno! \n");
    return;
    }
    if((tmp2 != NULL) && (strcmp(tmp2->nome, beta)!=0)){
    printf(">Non è presente il secondo treno! \n");
    return;
    }
    alfa_tmp= tmp->sequenza;
    beta_tmp= tmp2->sequenza;
    result = strcmp (alfa_tmp, beta_tmp)
    printf(">%d\n",result);
    }

    /*
    Procedura stampasomiglianza
    Stampa in ordine lessicografico secondo le sequenze di vagoni tutti i treni
    che hanno grado di somiglianza n con alfa, come nome del treno.
    */
    /*void stampasomiglianza(char *alfa, int n){
    struct listaTreniMerci2 *tmp;
    tmp = treniMerci2;
    if (tmp == NULL) {
    printf(">Non sono presenti treni! \n");
    return;
    }

    if (n) {

    printf(">%s", tmp->nome);
    printf(" %s\n", tmp->sequenza);
    tmp = tmp->next;
    }
    else {
    printf("Nessun treno ha somiglianza %d", n);
    printf("con %s\n", alfa);
    }
    }
    void scegliFunzione(){

    char alfa[40], beta[40], w[40];
    int n;
    char tastoScelto;
    char c;
    scanf("%c", &c);
    while (c != 'f') {
    switch(c){
    case 'i': scanf("%s", &alfa);
    scanf("%s", &w);
    treniMerci2=inserisci(alfa, w, treniMerci2);
    scanf("%c", &tastoScelto);
    break;
    case 'm': scanf("%s", &alfa);
    scanf("%s", &beta);
    somiglianza(alfa, beta);
    scanf("%c", &tastoScelto);
    break;

    }
    scanf("%c", &c);
    }
    return;
    }

    /*
    Funzione main
    La funzione principale del programma che inizializza i puntatori alle liste e
    invoca la procedura scegliFunzione.
    */
    int main(){
    treniMerci2 = (struct listaTreniMerci2 *)malloc(sizeof(struct listaTreniMerci2));
    treniMerci2 = NULL;
    sequenze = (struct listaTreniMerci2 *)malloc(sizeof(struct listaTreniMerci2));
    sequenze = NULL;
    scegliFunzione();
    return 0;
    }
    inseriti due treniMerci alfa e beta con le loro sequenze con
    i alfa AAUUI
    i beta AAUIP
    la funzione somiglianza richiamata con
    con
    m alfa beta
    dovrebbe stamparmi 3
    cioè la massima lunghezza della sequenza dei primi caratteri comuni sia alla sequenza del treno di nome alfa e sequenza AAUUI sia alla sequenza del treno di nome beta e sequenza AAUIP
    il problema e che nel mio codice non so come
    - rifermi al membro sequenza di ogni singolo treno attraverso i puntatori per poterli confrontare
    - se strcmp mi ritorna l'intero che corrisponda alla massima lunghezza dei primi caratteri comuni
    alle due sequenze
    qualcuno può aiutarmi grazie

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 © 2024 vBulletin Solutions, Inc. All rights reserved.