einzelne character zu einem String zusammenfügen

Java:
int c = 0;
int zeilen = 1;

int spalten = 1;
int  cnt = 0;                          // Dient zum vergleich
		
while((c = fgetc(file1)) != EOF)

{
	if(c == '\n')                  // Zählt die Zeilen
	{
		//printf("Zeichen: %i\n",zeilen);
		zeilen++;
		spalten = 1;                                // setzt spalen wieder auf 1, wenn eine neue Zeile beginnt 
	}
	if((c >= 48 && c<= 57) || (c >= 65 && c <= 90) || (c >= 97 && c <= 122))  // Liest brauchbare Zeichen ein
	{
		
		wortArray[spalten-1] = c;                    // Zeichen in Array für gefundene Wörter
		//printf("%c",wortArray[spalten-1]);
		//strcpy(wort, (char*) wortArray);
		cnt = 0;                                    // setzt cnt immer dann auf anfangswert, wenn zum erstenmal 
	}                                                      // wieder ein brauchbares Zeichen in er Zeile gefundenwurde
	else
	{
		cnt++;                                      // cnt wird hochgezählt, wenn unsinnige Zeichen gef. wurden
                                                                                          
		if(cnt == 1)                                         // nach dem das erstemal ein nicht brauchbares Zeichen gef. wurde,
		{					                    // soll nur einmal das Array als Wort ausgegeben werden
                                                        // und das Array soll danach wieder geleert werden für nächsten Zeichen
                                                        // es könnte ja sein, das 2 oder mehr unbrauchbare Zeichen
                                                        // hintereinander auftauchen. und da soll nur einmal diese Aktion, 
                                                        // Liste leeren und ausgeben, passieren  	
			//strcpy(wort, wortArray);

           // Versuch eine Zeichenkette als Wort auf der Konsole auszugeben, welches im if eingelesen wurde.
			//for(int j=0;j < 15; j++)printf("%c\n",wortArray[j]);     
			//wort = wortArray;
			printf("%s\n",wortArray);					
			
           for(int j=0;j < 15; j++) wortArray[j] = ' ';   // Array leeren, für neue Zeichen
		}

	}
						
	spalten++;				

}

Ich hab nur Probleme mit der Darstellung auf der Konsole

Ausgabe:
C:
izaguirre@ubuntu:~/C/Rowena4$ ./token -c test.txt Youth.txt
YOUTH
      and      
          ADULTS??X{?U?f??{?
 by            S??X{?U?f??{?
    ISAAC      S??X{?U?f??{?
          ASIMOV??X{?U?f??{?
    Red        V??X{?U?f??{?
        and    V??X{?U?f??{?
            Slim??X{?U?f??{?
               m?found?U?f??{?
               m?found?the??{?
               m?found?the?tw{?
               m?found?the?twstrange
               m?found?the?twstrange
               m?found?the?twstrange
               m?found?the?twstrange
               m?found?the?twstrange
               m?found?the?twstrange
    they       m?found?the?twstrange
         heard m?found?the?twstrange
               theound?the?twstrange
               theothunder?twstrange
               theothunder?soundsrange
               theothunder?soundsratheylittle
               theothunder?soundsratheylknewe
               theothunder?soundsratheylknewethatmals
               theothunder?soundsratheylknewethatmtheythe?morning~after
               theothunder?soundsratheylknewethatmtheytcouldrning~after
               theothunder?soundsratheylknewethatmtheytcouldrneverafter
               theothunder?soundsratheylknewethatmtheytcouldrneverashow
    their      theothunder?soundsratheylknewethatmtheytcouldrneverashow
          new  theothunder?soundsratheylknewethatmtheytcouldrneverashow
              petsothunder?soundsratheylknewethatmtheytcouldrneverashow
               etsotounder?soundsratheylknewethatmtheytcouldrneverashow
               etsotoutheirsoundsratheylknewethatmtheytcouldrneverashow
               etsotoutheirsparentstheylknewethatmtheytcouldrneverashow
*** stack smashing detected ***: ./token terminated
Speicherzugriffsfehler
 
Zuletzt bearbeitet:
Hi.

Man sollte keine magischen Zahlen im Code benutzen. Statt 48 nimm '0', statt 57 nimm '9' usw. Es gibt auch die Funktionen isdigit, isalpha und isalnum...

Zum Problem: Du mußt doch einfach nur den String vor der Ausgabe terminieren (was sheel übrigens bereits sagte...)
C:
wortArray[spalten] = '\0';
puts(wortArray);
Und ein Array brauchst du nicht leeren. Du kannst es doch einfach mit neuen Buchstaben überschreiben...

Gruß

\edit: *** stack smashing detected *** <-- was ist das denn für ein Fehler?! Hab ich ja noch nie gesehen :eek:
 
Zuletzt bearbeitet:
Hallo deepthroat,

hab deinen Ratschlag befolgt und dies in den else-Zweig getan

Java:
.....
}
else
{
cnt++; 
	if(cnt == 1)
	{							
			wortArray[spalten] ='\0';
			puts(wortArray);
						
	}
}
...
und bekomme nun folgende ausgabe:

C:
izaguirre@ubuntu:~/C/Rowena4$ ./token -c test.txt Youth.txt
YOUTH
YOUTH
Y
YbyT
YbyTISAAC
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
Y
*** stack smashing detected ***: ./token terminated
Speicherzugriffsfehler
izaguirre@ubuntu:~/C/Rowena4$
 
Ohne jetzt zu überlegen, warum die Ausgabe genau so zustande kommt:
Hast du auch den if-Zweig in Ordnung gebracht?

Möglicherweise solltest du zuerst mal überlegen,
was du dir eigentlich von diesem Programmstück erwartest,
und uns das mitteilen.

Kann ich, wenn ich an den Threadanfang denke, nämlich nicht mehr ganz nachvollziehen.
Was willst du erreichen?
 
Bsp:
C:
char wort[20];
int len = 0;

while ((c = fgetc ...) {
  if (c == '\n') {
    ...
  } else if (isalnum(c)) {
    wort[len++] = c;
  } else {
    if (len > 0) {
       wort[len] = '\0'; puts(wort); len = 0;
    }
  }
}
Gruß
 
Cool danke Deepthroat...
Das klappt bestens. mit den Zählnern habe ich schon nicht mehr durchgesehen. manchmal sieht man den wald vor lauter Bäumen nicht ^^.

Dnake Dir nochmal an dieser stelle.


Sheel... so hatte ich mir das vorgestellt. wie es in der Ausgabe, unten, zusehen ist.

Java:
...
int zeilen = 1;

int zeilenSpalten = 1;
int wortSpalten = 1;

int cnt = 0;


while((c = fgetc(file1)) != EOF)

{

	if(c == '\n')

	{

	   zeilen++;

	   zeilenSpalten = 1;

	}

	if((c >= 48 && c<= 57) || (c >= 65 && c <= 90) || (c >= 97 && c <= 122))

	{					

             wortArray[wortSpalten-1] = c;
	     wortSpalten++;

	     cnt = 0; 

	}

	else

	{

	     cnt++; 

	     if(cnt == 1 && wortSpalten-1 > 0)

	    {			      
		     wortArray[wortSpalten-1] ='\0';

		     puts(wortArray);
		     wortSpalten = 1;		      						

	    }

	}	
        zeilenSpalten++;				

}

Ausgabe:
C:
izaguirre@ubuntu:~/C/Rowena4$ ./token -c test.txt Youth.txt
YOUTH
and
ADULTS
by
ISAAC
ASIMOV
Red
and
Slim
found
the
two
strange
little
animals
the
morning
after
they
heard
the
thunder
sounds
they
knew
that
they
could
never
show
their
new
pets
to
their
parents
izaguirre@ubuntu:~/C/Rowena4$
 
Zurück