Oppure

Loading
01/08/17 22:37
drawtine
Salve a tutti, come un utente del forum mi ha consigliato, sto seguendo i lucidi di un docente di Informatica del Politecnico di Torino. Io sono arrivato all'argomento stringhe, ma qui ho trovato un esempio, che non riesco davvero a capire. Il programma prenderebbe in input due strighe (la prima per esempio 'Olimpo', la seconda 'Oio', e dovrebbe stampare 'lmp', eliminando cioè dalla prima stringa i caratteri della seconda). Ecco il codice da lui proposto:
#include <stdio.h>
#define MAXCAR 128

char *elimina(char str1[], char str2[]);

main() 
{
	char str1[MAXCAR], str2[MAXCAR];
	printf("Dammi la stringa str1: ");
	scanf("%s", str1);
	printf("Dammi la stringa str2: ");
	scanf("%s", str2);
	printf("str1-str2= %s\n", elimina(str1,str2));
}

char *elimina(char str1[], char str2[])
{
	int i, j, k;
	for(i=j=0;str1[i]!='Salve a tutti, come un utente del forum mi ha consigliato, sto seguendo i lucidi di un docente di Informatica del Politecnico di Torino. Io sono arrivato all'argomento stringhe, ma qui ho trovato un esempio, che non riesco davvero a capire. Il programma prenderebbe in input due strighe (la prima per esempio 'Olimpo', la seconda 'Oio', e dovrebbe stampare 'lmp', eliminando cioè dalla prima stringa i caratteri della seconda). Ecco il codice da lui proposto:

#include <stdio.h>
#define MAXCAR 128

char *elimina(char str1[], char str2[]);

main() 
{
	char str1[MAXCAR], str2[MAXCAR];
	printf("Dammi la stringa str1: ");
	scanf("%s", str1);
	printf("Dammi la stringa str2: ");
	scanf("%s", str2);
	printf("str1-str2= %s\n", elimina(str1,str2));
}

char *elimina(char str1[], char str2[])
{
	int i, j, k;
	for(i=j=0;str1[i]!='{parsed_message}';i++)
	{
		for(k=0;(str2[k]!= '{parsed_message}') && (str1[i]!=str2[k]);k++);
			if(str2[k]== '{parsed_message}')
				str1[j++]=str1[i];
	} 
	str1[j]='{parsed_message}';
	return str1;
}

Quello che non capisco è nel secondo for, nelle condizioni: la prima controlla che la stringa non sia finita, ma è la seconda che non capisco.
Da quel che ho capito io, con l'operatore && basterebbe che una delle due condizioni sia falsa per non entrare nel ciclo, ma se le lettere sono uguali, non dovrebbe essere falsa la seconda condizione?

Grazie';i++) { for(k=0;(str2[k]!= 'Salve a tutti, come un utente del forum mi ha consigliato, sto seguendo i lucidi di un docente di Informatica del Politecnico di Torino. Io sono arrivato all'argomento stringhe, ma qui ho trovato un esempio, che non riesco davvero a capire. Il programma prenderebbe in input due strighe (la prima per esempio 'Olimpo', la seconda 'Oio', e dovrebbe stampare 'lmp', eliminando cioè dalla prima stringa i caratteri della seconda). Ecco il codice da lui proposto:
#include <stdio.h>
#define MAXCAR 128

char *elimina(char str1[], char str2[]);

main() 
{
	char str1[MAXCAR], str2[MAXCAR];
	printf("Dammi la stringa str1: ");
	scanf("%s", str1);
	printf("Dammi la stringa str2: ");
	scanf("%s", str2);
	printf("str1-str2= %s\n", elimina(str1,str2));
}

char *elimina(char str1[], char str2[])
{
	int i, j, k;
	for(i=j=0;str1[i]!='{parsed_message}';i++)
	{
		for(k=0;(str2[k]!= '{parsed_message}') && (str1[i]!=str2[k]);k++);
			if(str2[k]== '{parsed_message}')
				str1[j++]=str1[i];
	} 
	str1[j]='{parsed_message}';
	return str1;
}

Quello che non capisco è nel secondo for, nelle condizioni: la prima controlla che la stringa non sia finita, ma è la seconda che non capisco.
Da quel che ho capito io, con l'operatore && basterebbe che una delle due condizioni sia falsa per non entrare nel ciclo, ma se le lettere sono uguali, non dovrebbe essere falsa la seconda condizione?

Grazie') && (str1[i]!=str2[k]);k++); if(str2[k]== 'Salve a tutti, come un utente del forum mi ha consigliato, sto seguendo i lucidi di un docente di Informatica del Politecnico di Torino. Io sono arrivato all'argomento stringhe, ma qui ho trovato un esempio, che non riesco davvero a capire. Il programma prenderebbe in input due strighe (la prima per esempio 'Olimpo', la seconda 'Oio', e dovrebbe stampare 'lmp', eliminando cioè dalla prima stringa i caratteri della seconda). Ecco il codice da lui proposto:
#include <stdio.h>
#define MAXCAR 128

char *elimina(char str1[], char str2[]);

main() 
{
	char str1[MAXCAR], str2[MAXCAR];
	printf("Dammi la stringa str1: ");
	scanf("%s", str1);
	printf("Dammi la stringa str2: ");
	scanf("%s", str2);
	printf("str1-str2= %s\n", elimina(str1,str2));
}

char *elimina(char str1[], char str2[])
{
	int i, j, k;
	for(i=j=0;str1[i]!='{parsed_message}';i++)
	{
		for(k=0;(str2[k]!= '{parsed_message}') && (str1[i]!=str2[k]);k++);
			if(str2[k]== '{parsed_message}')
				str1[j++]=str1[i];
	} 
	str1[j]='{parsed_message}';
	return str1;
}

Quello che non capisco è nel secondo for, nelle condizioni: la prima controlla che la stringa non sia finita, ma è la seconda che non capisco.
Da quel che ho capito io, con l'operatore && basterebbe che una delle due condizioni sia falsa per non entrare nel ciclo, ma se le lettere sono uguali, non dovrebbe essere falsa la seconda condizione?

Grazie') str1[j++]=str1[i]; } str1[j]='Salve a tutti, come un utente del forum mi ha consigliato, sto seguendo i lucidi di un docente di Informatica del Politecnico di Torino. Io sono arrivato all'argomento stringhe, ma qui ho trovato un esempio, che non riesco davvero a capire. Il programma prenderebbe in input due strighe (la prima per esempio 'Olimpo', la seconda 'Oio', e dovrebbe stampare 'lmp', eliminando cioè dalla prima stringa i caratteri della seconda). Ecco il codice da lui proposto:
#include <stdio.h>
#define MAXCAR 128

char *elimina(char str1[], char str2[]);

main() 
{
	char str1[MAXCAR], str2[MAXCAR];
	printf("Dammi la stringa str1: ");
	scanf("%s", str1);
	printf("Dammi la stringa str2: ");
	scanf("%s", str2);
	printf("str1-str2= %s\n", elimina(str1,str2));
}

char *elimina(char str1[], char str2[])
{
	int i, j, k;
	for(i=j=0;str1[i]!='{parsed_message}';i++)
	{
		for(k=0;(str2[k]!= '{parsed_message}') && (str1[i]!=str2[k]);k++);
			if(str2[k]== '{parsed_message}')
				str1[j++]=str1[i];
	} 
	str1[j]='{parsed_message}';
	return str1;
}

Quello che non capisco è nel secondo for, nelle condizioni: la prima controlla che la stringa non sia finita, ma è la seconda che non capisco.
Da quel che ho capito io, con l'operatore && basterebbe che una delle due condizioni sia falsa per non entrare nel ciclo, ma se le lettere sono uguali, non dovrebbe essere falsa la seconda condizione?

Grazie'; return str1; }

Quello che non capisco è nel secondo for, nelle condizioni: la prima controlla che la stringa non sia finita, ma è la seconda che non capisco.
Da quel che ho capito io, con l'operatore && basterebbe che una delle due condizioni sia falsa per non entrare nel ciclo, ma se le lettere sono uguali, non dovrebbe essere falsa la seconda condizione?

Grazie
aaa
01/08/17 23:07
drawtine
Niente, risolto, non avevo visto il punto e virgola dopo il for...scusate
aaa
01/08/17 23:09
Mikelius
attento che nel 2° for c'è un ';' finale

Ecco cosa veramente è:
 for(k=0;(str2[k]!= 'attento che nel 2° for c'è un ';' finale


Ecco cosa veramente è:
 for(k=0;(str2[k]!= '{parsed_message}') && (str1[i]!=str2[k]);k++)
{
    ;
}
if(str2[k]== '{parsed_message}')
    str1[j++]=str1[i];


Quell'idendazione è fuorviante. Classico esempio di come una buona idendazione eviti nattate insonni.

EDIT: Visto che hai risolto da solo. Bene ') && (str1[i]!=str2[k]);k++) { ; } if(str2[k]== 'attento che nel 2° for c'è un ';' finale

Ecco cosa veramente è:
 for(k=0;(str2[k]!= '{parsed_message}') && (str1[i]!=str2[k]);k++)
{
    ;
}
if(str2[k]== '{parsed_message}')
    str1[j++]=str1[i];


Quell'idendazione è fuorviante. Classico esempio di come una buona idendazione eviti nattate insonni.

EDIT: Visto che hai risolto da solo. Bene ') str1[j++]=str1[i];


Quell'idendazione è fuorviante. Classico esempio di come una buona idendazione eviti nattate insonni.

EDIT: Visto che hai risolto da solo. Bene
Ultima modifica effettuata da Mikelius 01/08/17 23:12
aaa
02/08/17 12:00
lumo
Io avrei scritto piuttosto

k = 0;
while ((str2[k]!= 'Io avrei scritto piuttosto


k = 0;
while ((str2[k]!= '{parsed_message}') && (str1[i]!=str2[k])) {
    k++;
}

Così è chiaro che la mia intenzione è di incrementare l'indice finché non trovo un carattere uguale.
Se proprio si vuole lasciare il for vuoto, meglio usare {} ma non un semplice punto e virgola, troppo facile sbagliare.') && (str1[i]!=str2[k])) { k++; }

Così è chiaro che la mia intenzione è di incrementare l'indice finché non trovo un carattere uguale.
Se proprio si vuole lasciare il for vuoto, meglio usare {} ma non un semplice punto e virgola, troppo facile sbagliare.
aaa