Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    35

    [C] Problema Progarmma stringhe

    Non riesco a far funzionare questo frammento di codice che dovrebbe vedere se la seconda stringa inserita è contenuta nella prima..
    codice:
    printf("Inserisci una stringa:\n");
    fflush(stdin);
    gets(stra);
    fflush(stdin);
    printf("Inserisci un'altra stringa:\n");
    gets(strb);
    fflush(stdin);
    j=0;
    for(i=0;((i<strlen(stra))&&(j!=strlen(strb)));i++){
                            j=0;
                            if(stra[i]==strb[j]){
                             for(j=1,i=1;((j<strlen(strb))&&(i<strlen(stra))&&stra[i]==strb[j]);j++,i++) printf("%d %d\n", j,i);
                            }
                          }
    if(j==strlen(strb)) printf("E' contenuta\n");
            else printf("Non e' contenuta\n");

    ora spiego meglio cosa non funziona
    caso 1:
    stringa 1:ciao
    stringa 2:cia
    funziona

    caso 2:
    stringa 1:ciao
    stringa 2:ai
    dice che è contenuta

    caso 3:
    stringa 1:nicola
    stringa 2:cola
    si blocca tutto :master:

    Aiutatemi

  2. #2
    Usa la funzione strstr() dichiarata nell'header <string.h> , che richiede in ingresso due stringhe e restituisce in uscita un puntatore a char che è NULL se la substringa non è incontrata .

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    35
    grazie ma non potresti vedere cosa non va nel pezzo di codice?? vorrei non usare le funzioni di string.h + del dovuto..

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Prova questo

    codice:
    char *sa, *sb, *pc = stra;
    while (*pc)
    {
      sa = pc;
      sb = strb;
    
      while (*sa && *sb && !(*sa-*sb)) sa++, sb++;
    
      if (!*sb)
      {
        printf("Trovato dal carattere %d (base 0)\n", pc-stra);
        break;
      }
    
      pc++;
    }

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    35
    il fatto è che i puntatori non li abbiamo ancora fatti a scuola.. mi servirebbe di capire l'errore che c'è nel mio programma che ho scritto..

  6. #6
    Originariamente inviato da nico402
    il fatto è che i puntatori non li abbiamo ancora fatti a scuola.. mi servirebbe di capire l'errore che c'è nel mio programma che ho scritto..
    La tua soluzione è eccessivamente 'complicata'
    Prendi in considerazione questa versione semplificata:

    codice:
    	char stra[30]="ciao il mio nome è Samuele";	
    	char strb[30]="nome";
    
    	unsigned int j=0L;
    	bool findSubStr;
    	
    	printf("\nstra = \"%s\"\n", stra);
    	printf("strb = \"%s\"\n\n", strb);
    	
    	for(unsigned int i=0; i<strlen(stra)-1 && j<=strlen(strb)-1 ; i++)
    	{
    		if(stra[i]==strb[j])
    		{
    			j++;
    			findSubStr=true;
    		}
    		else
    		{
    			j=0L;
    			findSubStr=false;
    		}
    	}
    	
    	if( findSubStr )
    		printf("E' contenuta\n");
    	else
    		printf("Non e' contenuta\n");
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    35
    ti amo!!!!!!!!
    ora va!!

  8. #8
    Anche la versione di oregon (modificata per lavorare senza i puntatori) è molto interessante:
    codice:
    	char stra[30] = "ciao il mio nome è Samuele";	
    	char strb[30] = "nome";	
    	
    	printf("\nstra = \"%s\"\n", stra);
    	printf("strb = \"%s\"\n\n", strb);
    	
    	unsigned int sb, pc=0;
    	while (stra[pc])
    	{
    		sb = 0;
    		while (stra[pc] && strb[sb] && !(stra[pc]-strb[sb] )) pc++, sb++;
    		
    		if (!strb[sb])
    		{
    			printf("\nTrovato dal carattere %d (base 0)\n", pc-strlen(strb));
    			break;
    		}
    		pc++;
    	}
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  9. #9
    Originariamente inviato da Samuele_70
    La tua soluzione è eccessivamente 'complicata'
    Prendi in considerazione questa versione semplificata:

    codice:
    	char stra[30]="ciao il mio nome è Samuele";	
    	char strb[30]="nome";
    
    	unsigned int j=0L;
    	bool findSubStr;
    	
    	printf("\nstra = \"%s\"\n", stra);
    	printf("strb = \"%s\"\n\n", strb);
    	
    	for(unsigned int i=0; i<strlen(stra)-1 && j<=strlen(strb)-1 ; i++)
    	{
    		if(stra[i]==strb[j])
    		{
    			j++;
    			findSubStr=true;
    		}
    		else
    		{
    			j=0L;
    			findSubStr=false;
    		}
    	}
    	
    	if( findSubStr )
    		printf("E' contenuta\n");
    	else
    		printf("Non e' contenuta\n");


    ciao! mi potete spiegare perché se metto
    codice:
    stra[i]!='\0' && strb[j]!='\0'
    al posto di
    codice:
    i<strlen(stra)-1 && j<=strlen(strb)-1
    nel for, se tento un input tipo ciao (prima parola) e oai (seconda parola) nel primo mio esempio non va e nell'altro si?

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.