Zeichenkette codieren und Ausgabe basteln
-
Hallo!
Falls ich irgendetwas falsch mache dann bitte nicht gleich schimpfen, ich bin ja noch ganz neu im Forum
Hab gerade ein eigentlich relativ einfach C Programm zu machen, welches mir Zeilenweise Zeichenketten aus einer Textdatei ausließt und mittels einfachem Kodieralgorithmus verschlüsselt.
So wird "bbbaaaaa" zu "b3a5".
Soweit so gut, das Programm funktioniert eigentlich schon fast komplett ,nur habe ich bis jetzt die Ausgabe der codierten Zeichen mittels printf auf die Konsole ausgegeben. Jetzt will ich sie aber entweder als char[] oder als char Pointer von der folgenden Funktion returnt bekommen, so dass ich sie dann nur mehr mittels fprintf in die Output Datei übertragen muss. Da aber Pointer ein wunder Punkt bei mir sind, und ich ca schon tausend Varianten ausprobiert habe, dachte ich mal ich frage ein paar Profis.
Hier mal die Funktion:
char *decode_line (char *cLine)
{
int counter;
int char_counter=1;
int length = strlen(cLine);//Ueberpruefe ob das naechste Element gleich dem vorigen ist
for(counter=0;counter<length;counter++)
{
if(cLine[counter]==cLine[counter+1])
{
char_counter+=1;
}else
{
//Hier wird die Ausgabe gebastelt
printf("%c%d",cLine[counter],char_counter);
char_counter=1;
}
}
return cLine;}
Statt cLine soll dann am Schluss zb cOutline returniert werden, in der dann die kodierten Zeichen stehen. Hab schon mit strcat und strcpy versucht mir einen entsprechenden String zu basteln, aber leider ohne Erfilg
-
hi
also du koenntest das folgendermassen machen du koenntest deinen char mit
char x = toascii(int zahl);
deine zahl in einen char umwandeln und dann mit strcat() an deinen string anhaengen
ich hoffe dass toascii auch einen normalen int in einen char umwandelt in meinem buch steht zwar dass toascii ein makro ist dass der übergebenen wert duch loeschen aller bits auser den 7 neiderwertigsten auf den bereich 0 bis 127 begrenzt und das s ergebniss dieser operation zurueckliefert...
waenn dass nicht funkt wird dir wohl glaube ich nichts anderes überbleiben als die umwandlung zu fuss zu programmmieren und den char* dann anfuegen
ich kenn keine sonst keine fertige funktion die zahlen in char arras umwandelt aber du kannst waenn du es zufus hacken musst so machen dass du mit % 10 die letzte stelle aus der ganzen zahl heraushohlst dann mit einer switch anweisung diese in einen char umwandelst diesen char dann zu deinem zahlen char array hinzufuegst dann mit / 10 die letzte stelle die du zuerst mit % 10 herausgeholt hast wegwirfst und dann die schleife wieder von forne beginnst und dann waenn die schleife fertig ist den char array der nun die zahl beinhaltet zurueckgibst!!
ich schreib dir den code deswegen nicht rein damit du deinen spass beim hacken hast!
na dann!ps in cpp koenntest das folgendermassen machen:
#include <sstream> using namespace std; int meineZahl = 976; string s; ostringstream outStream; outStream << meineZahl; s = outStream.str();
-
Verstehe ich dich richtig? Du willst den String, der aktuell mit printf auf den Monitor geschickt wird, als Rückgabewert haben? Dann verwende doch sprintf() (erwartet als ersten Parameter die Adresse des Zielbereiches (char*), den Rest wie printf()).
Aber denk' dran, wenn du einen char* nach außen übergeben willst, mußt du ihn entweder vorgegeben bekommen oder mit malloc() anlegen (und im letzteren Fall den Nutzer darauf hinweisen, daß er ihn mit free() aufräumen muß).
-
Schon langsam weiß ich nicht mehr weiter
So wie ich die Funktion gepostet habe, funktioniert alles wunderbar und gibt mir das richtige Ergebnis auf den Bildschirm aus, nur jetzt will ich das ganze über den FILE Stream Output in eine Datei ausgeben.
Sobald ich schreibe:
fprintf(output,char_counter);
fprintf(output,cLine[counter]);kann ich zwar das Programm kompilieren, jedoch bekomm ich die Warnungs:
"Warning: Passing arg 2 of fprintf makes pointer from integer without cast"
Führe ich das Programm dann aus bekomm ich vom Linux die Meldung "Speicherzugriffsfehler" und zwar genau bei der Zeile
Update:
Wah!!!
Cstoll hat mir die Antowrt ja schon gegeben. Natürlich muss es so heißen:
fprintf(output,"%c%d",cLine[counter],char_counter);
Jetzt gehts logischerweise auch! Besten Dank an alle!!!
Hoffe mir kann noch wer helfen