hilfe für klausuraufgabe
-
hallo,
benötigte eure hilfe bei einer klausuraufgabe.
vielleicht weiß jemand von euch weiter.
komplier gibt schon vor der for-schleife eine fehlermeldung aus wegen "variable-size-typ". was er mir damit sagen, weiß ich allerdings nicht...aufgabe:
In einer gedruckten Zeile der Länge L sollen bestimmte Zeichen markiert werden, indem in der folgenden Zeile an diesen Stellen in ^augegeben wird. Diese Stellen werden durch Zahlen p[0]..p[n-1] gegeben. Die Zahlen für die Positionsangaben liegen zwischen 0 und L-1 einschließlich und dürfen sortiert angenommen werden.
Beispiel einer Anwendung:
Dieser Proplem isd ein Kintersbiel
^ ^ ^ ^ ^Schreiben Sie eine Funktion mit folgenden Parametern:
Dem String, der markiert werden soll
Einem Feld mit den Positionen, die markiert werden sollen
Die Funktion soll den String mit den Markierungen zurückgeben. Im Beispiel ist das also nur die zweite Zeile. Vorsicht: Es ist nicht Aufgabe der Funktion, die Markierungen auszugeben. Das dürfen Sie in einem kleinen Testprogramm an anderer Stelle tun. Die Funktion soll wirklich nur die String berechnen.meine bisherige lösung:
#include <iostream>
#include <stdlib.h>
#include <cstring>using namespace std;
int anz_letters=30;
int anz_pos=3;string markieren ( char text[anz_letters], int position[anz_pos]={3,5,8})
{
for (int no=0; no<strlen(text); ++no)
{
if (no==position)
{
text[no]<<"^"<<;
}
}
}int main(int argc, char *argv[])
{
text={'Dieser Proplem isd ein Kintersbiel'};
makieren();system("PAUSE");
return 0;
}
-
ungetestet so in forum gehackt so
char* markieren(char *text,int *position,int n){ for(int i=0;i<n;++i) text[position[i]]='^'; //das kann unfreundlich werden wenn eine postion grösser gleich strlen(text) ist im zweifel halt noch abfangen ist aber glaub ich laut aufgabenstellung nicht nötig return text; } int main(int argc, char *argv[]){ int position[]={3,5,8}; char text[]="Dieser Proplem isd ein Kintersbiel"; printf("%s\n",markieren(text,position,3)); }
-
zuerst einmal, danke für deine hilfe.
natürlich habe ich dazu noch ein paar kleine fragenchar* markieren(char *text,int *position,int n)
warum machst du die zu zeigern ? sind doch welche ? oder ?
ohne die funktioniert das ganze nicht, warum ?printf("%s\n",markieren(text,position,3));
die ausgabe ist folgende:
Die^er Prole isd ein Kintersbielwie bekomme ich denn die ^ eine zeile runter?
kenne printf nicht. aber so wie ich das nachgelesen habe überschreibt die fkt den string/das feld mit einer/der formatieten ausgabe %s /n.
was bewirkt %s? soll /n eigentlich den verloren geganen absatz machen ?fragen über fragen...
-
char* markieren(char *text,int *position,int n)
warum machst du die zu zeigern ? sind doch welche ? oder ?
ohne die funktioniert das ganze nicht, warum ?kannst in c direkt keine arrays übergeben (oder nur mit nem trick wenn du eigenen datentypen bastelst), das ist auch gewollt so weil das sonst performanceeinbussen mitsich bringen würde, da die parameter auf den stack kopiert werden, wenn da immer erst ein ganzes array raufgepackt werden müsste na dann tach auch. also übergibt man nur einen zeiger auf einen speicherbereich in dem dein arrayanfang ist...
printf("%s\n",markieren(text,position,3));
die ausgabe ist folgende:
Die^er Prole isd ein Kintersbielwie bekomme ich denn die ^ eine zeile runter?
kenne printf nicht. aber so wie ich das nachgelesen habe überschreibt die fkt den string/das feld mit einer/der formatieten ausgabe %s /n.
was bewirkt %s? soll /n eigentlich den verloren geganen absatz machen ?ups achso der soll die nicht überschreiben...
na dann gib der funktion nur ein array gleicher länge wie text und wenn die position übereinstimmt ein ^ hinschreiben und sonst ein leerzeichen...
-
hey windalf...
muss da nochmal deinen rat einholen. also so ungefähr stelle ich mir das nun vor. gibt da aber wieder ein paar abers...char *markieren(char *mark_text, int *position, int n)
{
for(int i=0;i<n;++i)
{
if (text[position[i]]==mark_text[position[i]])
{
mark_text[position[i]]='^';
}
else
{
mark_text[position[i]]=' ';
}
}return mark_text;
}int main(int argc, char *argv[])
{
int position[]={3,5,8};
char text[]="Dieser Proplem isd kein Kintersbiel";
char mark_text[]=" "; //wenn ich da eine größe eingebe gibts einen fehler und wenn ich keine angebe auch, habs daher so gemacht
cout<<text;
markieren(mark_text,position,3)); //wie kann ich markieren denn nun ohne printf ausführen? mir ist das mit der fkt als zeiger nicht klar. bekomme so eine fehlermeldung.
cout<<mark_text;alles in allem sieht's nicht mehr ganz so toll aus wie deine lösung, aber meine mittel sind beschränkt...
-
ich meinte eher den string den du übergibst präparieren
char* markieren(char *text,int *position,int n){ for(int i=0;i<n;++i) text[position[i]]='^'; return text; } int main(int argc, char *argv[]){ int i,position[]={3,5,8}; char text[]="Dieser Proplem isd ein Kintersbiel"; char mark_text[sizeof(text)]; for(i=0;i<sizeof(text);++i)mark_text[i]=' '; mark_text[i]=0; printf("%s\n",text); printf("%s\n",markieren(mark_text,position,3)); }
-
THX Windalf!