Leerzeichen von Strings entfernen

  • Themenstarter Themenstarter Deerhunter
  • Beginndatum Beginndatum
D

Deerhunter

Hallo,

ich habe folgendes Problem:

Ich will ein Programmabschnitt schreiben das mir die Leerzeichen von einem Eingabetext entfernt.

Folgendes ist dabei rausgekommen:
Code:
 #include "stdio.h"
#include "string.h"

void main (void)

{
unsigned long Text[1025];unsigned long Eingabe[1025]; char* Position; unsigned long i;

	puts("Bitte Text eingeben:\n");

	
	scanf_s("%1024s\n",Eingabe, sizeof(Eingabe));
	Position=*Eingabe;

	for(i=0;Eingabe[i]!='\0';i++)
	{
		if(Eingabe[i]=' ');
			Eingabe[i]=Text[i++];
	}

	printf("%s", Text);

	return;

}

Der Compiler meckert nicht aber beim ausführen der Schleife kommt ein Fehler und er bricht ab.
Warum !

Über Hilfe wäre ich echt dankbar
 
Ich kenne mich ja nicht aus, aber in ein Feld für Zahlen (long) willst Du Zeichen einlesen (%s), richtig? Evtl. gibt es deswegen bei der Ausführung Probleme. Zudem solltest Du einfach mal einen Debugger starten, der schmeißt Dir auch sicherlich eine sehr gute Beschreibung des Fehlers, bzw. sagt Dir wann die Ausführung abbricht.
 
Habs mir nciht ganz angeschaut, aber das hier:
Code:
if(Eingabe[i]=' ');

solltest du besser durch ein == lösen ;-)
Ansonsten machst du ncihts anderes als für jedes Zeichen ein Leerzeichen abzuspeichern. Da das Leerzeichen irgendein AsciiCode größer als 0 haben wird führt er die if-Bedingung auch jedes mal aus.
 
Habs mir nciht ganz angeschaut, aber das hier:
if(Eingabe[ i ]=' ');
solltest du besser durch ein == lösen ;-)
Ansonsten machst du ncihts anderes als für jedes Zeichen ein Leerzeichen abzuspeichern. Da das Leerzeichen irgendein AsciiCode größer als 0 haben wird führt er die if-Bedingung auch jedes mal aus.

Ach und wenn wir schon mal an der besagten Stelle sind, das Semikolon muss auch weg. Denn eine If-Bedingung ohne geschweifte Klammern führt den ersten Befehl nach der Bedingung aus, ein Semikolon wird als solch einen Befehl interpretiert.
 
Moin,

leider blicke ich Durch Deinen Code auch nicht wirklich durch - benutze bitte in Zukunft die Code-Tags (#-Button im Editor), das macht es erheblich lesbarer! Danke ...

Der Compiler meckert nicht aber beim ausführen der Schleife kommt ein Fehler und er bricht ab.
Verrate uns doch auch, welcher Fehler kommt :eek::p

Was mir so spontan auffällt (neben dem bereits gesagten Dingen):
C++:
unsigned long Text[1025];
unsigned long Eingabe[1025];
Dies sollen doch wohl Deine Textvariablen sein, oder? Es sind aber Arrays für 1025 long-Zahlen :eek:
Andernfalls brauchst auch "string.h" nicht includieren .....

C++:
Position = *Eingabe;
Was soll dann denn bewirken :confused:

C++:
for( i=0; Eingabe[i]!='\0'; i++ )
{
    if( Eingabe[i] == ' ' )
    {
        Eingabe[i] = Text[i++];
    }        
}
Da "Eingabe[ i ]" einen long-Wert enthalten müsste, wird es kaum ein Blank sein (wenn überhaupt, dann 0) (!)

Ich habe hier mal Deinen Code etwas überarbeitet - ist aber VHIDT (also ungetestet):
C++:
#include "stdio.h"
#include "string.h"

void main (void)
{
    unsigned char Text[1025];
    unsigned char Eingabe[1025]; 

    puts("Bitte Text eingeben:\n");

    scanf_s( "%1024s\n", Eingabe, sizeof Eingabe );

    // jetzt eventuelle Blanks entfernen
    int j = 0; // Zähler für 'Text'
    for( int i = 0; Eingabe[i]!='\0'; i++ )
    {
        if( Eingabe[i] != 0x20 )
        {
            Text[j] = Eingabe[i];
            j++;
        }
    }

    printf("%s", Text);
    return;
}

Vlt. hilft Dir das ja weiter ;)

Gruß
Klaus
 
Zuletzt bearbeitet von einem Moderator:
Das Problem dürfte noch sein, dass scanf keine Leerzeichen bei der Eingabe zulässt, also müsste das ganze in etwas so aussehen:

scanf("%20[0-9a-zA-Z ]s", Eingabe);
 
wenn du einen string aus mehreren Worten einlesen willst solltest du scanf(); nicht verwenden. scanf(); interpretiert jedes <SPACE>, <TAB> und <Return> als ende des Strings. Weiter oben hast du auch puts(); verwendet. Dann solltest du auch gets(); verwenden um sätze einzulesen und in einem string abzuspeichern
 
Zurück