Verzweifel! String soll in Hilfstring ohne ' ', ',' und '.' speichern



  • Hallo community,

    ich dachte mir eine simple aufgabenstellung , jedoch bin ich nurnoch am verzweifeln.

    Ein Einfaches Wort Zum Beispiel "Hallo Peter.wie.geht es,dir" wird in einem Array gespeichert.

    Nun soll in einem Hilfsarray das Wort ohne leerzeichen punkt und komma gespeichert werden.
    quasi: HalloPeterwiegehtesdir

    wenn ich in meinem code nur EINE abfrage habe also entweder wort[i] != ' '
    oder wort[i] != '.' dann wird das wort im array richtig , also ohne leerzeichen oder . oder , abgelegt.

    Wenn ich aber alle 3 abfragen machen will, also: wort[i] != ' ' || wort[i] != ',' ..

    dann wird das wort wie aus dem ursprungsarray übernommen und garnichts wird gekürzt. ich hoffe ihr versteht mein problem 😕

    hier der sourcecode:

    so klappt es, leider nur mit EINER abfrage!

    #include <stdio.h>
    
    int main(){
    
    	char wort[80];
    	char dummy[80];
    
    	printf("Bitte gebe ein Wort ein (max. 80 Zeichen): ");
    	gets(wort);
    
    	printf("Eingegebenes Wort: %s\n", wort);
    
    	int i = 0;
    	int j = 0;
    
    	for(i = 0; wort[i] != '\0'; i++){
    
    		if(wort[i] != ' '){
    			dummy[j] = wort[i];
    			j++;
    		}
    	}
    	dummy[j] = '\0';
    	printf("Das gekuertze Wort: %s\n", dummy);	
    
    	return 0;
    }
    

    es soll aber bei allen 3 abfragen funktionieren, und dann klappt es nicht!!

    hier die beiden beispiele die leider nicht klappen!

    #include <stdio.h>
    
    int main(){
    
    	char wort[80];
    	char dummy[80];
    
    	printf("Bitte gebe ein Wort ein (max. 80 Zeichen): ");
    	gets(wort);
    
    	printf("Eingegebenes Wort: %s\n", wort);
    
    	int i = 0;
    	int j = 0;
    
    	for(i = 0; wort[i] != '\0'; i++){
    
    		if(wort[i] != ' '){
    			dummy[j] = wort[i];
    			j++;
    		}
    		else if(wort[i] != ','){
    			dummy[j] = wort[i];
    			j++;
    		}
    		else if(wort[i] != '.'){
    			dummy[j] = wort[i];
    			j++;
    		}
    	}
    	dummy[j] = '\0';
    	printf("Das gekuertze Wort: %s\n", dummy);	
    
    	return 0;
    }
    
    #include <stdio.h>
    
    int main(){
    
    	char wort[80];
    	char dummy[80];
    
    	printf("Bitte gebe ein Wort ein (max. 80 Zeichen): ");
    	gets(wort);
    
    	printf("Eingegebenes Wort: %s\n", wort);
    
    	int i = 0;
    	int j = 0;
    
    	for(i = 0; wort[i] != '\0'; i++){
    
    		if(wort[i] != ' ' || wort[i] != '.' || wort[i] != ','){
    			dummy[j] = wort[i];
    			j++;
    		}
    	}
    	dummy[j] = '\0';
    	printf("Das gekuertze Wort: %s\n", dummy);	
    
    	return 0;
    }
    

    Wer kann mir weiterhelfen?

    Gruß

    Muffel



  • Muffelhs schrieb:

    wenn ich in meinem code nur EINE abfrage habe also entweder wort[i] != ' '
    oder wort[i] != '.' dann wird das wort im array richtig , also ohne leerzeichen oder . oder , abgelegt.

    Wenn ich aber alle 3 abfragen machen will, also: wort[i] != ' ' || wort[i] != ',' ..

    Übersetz die Abfrage doch mal in "normale Sprache":
    Wenn das Zeichen (wort[i]) ungleich ' ' ist ODER das Zeichen ungleich ',' ist...

    Das ist immer wahr. Den ist das Zeichen ' ', so ist es ungleich ','. Ist es ',', so ist es ungleich ' '.

    Wie wärs mit einer logischen UND-Verknüpfung, und keiner ODER-Verknüpfung?

    Wenn das Zeichen ungleich ' ' ist UND das Zeichen ungleich ',' ist, dann mache....



  • if(wort[i] != ' ' || wort[i] != '.' || wort[i] != ','){

    Probiere mal

    if( !strchr(" .,",wort[i]) )
    

    vielleicht wird dir die Logik dann klarer.
    Dein 1. funktionierendes Beispiel würde dann zum Vergleich etwa so aussehen:

    if( !strchr(" ",wort[i]) )
    

    bzw.

    if( !strchr(".",wort[i]) )
    

    bzw.

    if( !strchr(",",wort[i]) )
    


  • #include <stdio.h>
    #include <string.h>
    
    int main(void)
    {
    	char input[80];
    	char output[80];
    	unsigned int i, j;
    
    	fgets(input, 80, stdin);
    
    	memset(output, 0, 80);
    
    	for (i = 0, j = 0; i < strlen(input); ++i)
    	{
    		if (input[i] == '\n') // Zeichen für neue Zeile entfernen
    		{
    			input[i] = '\0';
    		}
    
    		if (input[i] != '.' && input[i] != ',' && input[i] != ' ')
    		{
    			output[j++] = input[i];
    		}
    	}
    
    	printf("Eingabe: %s\nAusgabe: %s\n", input, output);
    
    	return 0;
    }
    

Anmelden zum Antworten