Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

hallo,

ich brauche eine routine die einen string übergeben bekommt. in diesem string steht "REM IF variable operator 'vergleichstext'" es ist ein einzeiliger string:


char line[512];

nun muss diese programm "REM IF" komplett wegsplitten und variable operator und 'vergleichstext' in 3 verschiedene variablen schreiben, danach muss es schaun

wenn operator = '==' dann muss variable == 'vergleichstext' sein

wenn operator = '!=' dann muss variable != 'vergleichstext' sein

wenn dann die variable == 'vergleichstext' bzw. nicht gleich 'vergleichstext' soll der wert 1 von der routine zurückgegeben werden!

ich hab schon was versucht aber ich komm auf kein ergebnis...wär echt cool wenn mir jemand helfen könnt....wenigstens ansatzweise!

danke schon im vorraus an alle die sich beteiligen!!!!

Geschrieben

das heißt:

char suchstr[7] = "REM IF ";

char *strstr(const char *line, const char *suchstr

und jetz weiß ich aber nicht wie ich den string der nach "REM IF " kommt rauskopieren soll weil er ja nicht fest sondern variabel ist!!!

Geschrieben

stimmt das weis ich aber ich weiß nicht wie ich es umsetzen soll!? bin im 2. monat von meiner ausbildung.

oh tut mir leid wollt nicht unhöflich sein ;) hab ich mir aber irgendwie so angewöhnt das ich 3 ausrufezeichen mach ... genauso wie . und ? :cool:

Geschrieben

Ich seh gerade das

char suchstr[7] = "REM IF ";

falsch ist. Das ist eine Stelle zuwenig. Du brauchst ja noch eine für die abschließende binäre Null. Das heißt es muss

char suchstr[8] = "REM IF ";

heißen, oder direkt

char suchstr[] = "REM IF ";

Du könntest es jetzt so ungefähr machen:


char* lpPointer;

lpPointer = strstr(line, suchstr);
if (lpPointer)
{
strncpy(ziel,lpPointer+7,stellen);
}
[/PHP]

Ist natürlich nur Pseudocode...

PS: und das Beispiel setzt vorraus das nach dem Suchstring noch mehr in dem Array steht, sonst würdest du was anderes kopieren oder Zugriffsverletzung bekommen.

Geschrieben

Auch auf die Gefahr hin dass ich wieder Mist erzähle:

char* ist ein Zeiger auf den Speicherbereich eines chars.

Per char++ dürftes du an der nächsten Stelle sein.

EDIT: Zuspät...:D

Geschrieben

hier hab ich mal nen code. kannst du(Guybrush Threepwood) mal schaun ob es so funktionieren würde das am ende in den variablen das richtige drinsteht? wäre cool! jezt mal nur das splitten!

int rem_if(char line)

{

	char suchstr_g[] = "REM IF ";

	char suchstr_v[];

	char suchstr_o[] = "=";

	char suchstr_t[];

	char* pointer;

	char ges[];

	char variable[];

	char operator[];

	char vergleichstext[];


	pointer = strstr(line, suchstr_g);

	strncpy(ges,pointer+7,250);


	pointer = strstr(ges,suchstr_o);

	strncpy(variable,0+pointer,250);


	pointer = strstr(ges,suchstr_o);

	strncpy(operator,pointer+2,250);


	pointer = strstr(ges,suchstr_o);

	pointer = pointer+2;

	strncpy(vergleichstext,pointer,250);


} 

Geschrieben

Warum probierst du es nicht einfach aus?

Der Debugger ist dabei auch sehr sehr hilfreich.

Allerdings sehe ich gerade was anderes:

Das hier:

char suchstr_g[] = "REM IF ";

funktioniert nur wenn du der Variablen direkt einen Wert zuweist.

Wenn du die später füllen willst dann musst du schon eine Arraygröße angeben, oder das später dynamisch reservieren. Aber ich denke die Größe fest angeben reicht erstmal.

Geschrieben

int rem_if(char line)

{

	char suchstr_g[512] = "REM IF ";

	char suchstr_v[512];

	char suchstr_o[512] = "=";

	char suchstr_t[512];

	char* pointer;

	char ges[512];

	char variable[512];

	char operator[512];

	char vergleichstext[512];

	int retval;


	pointer = strstr(line, suchstr_g);

	strncpy(ges,pointer+7,512);


	pointer = strstr(ges,suchstr_o);

	strncpy(variable,0+pointer,512);


	pointer = strstr(ges,suchstr_o);

	strncpy(operator,pointer+2,512);


	pointer = strstr(ges,suchstr_o);

	pointer = pointer+2;

	strncpy(vergleichstext,pointer,512);


	if(operator == "=")

	{

		if(variable == vergleichstext)

		{

			retval = 1;

		}

		else

		{

			retval = 0;

		}

	}

	else

	{

		retval = 0;

	}

        return retval;

} 


kann das so funktionieren??? das ist jetz mein komplettes programm...werden eventuell vorhandene leerzeichn ignoriert? wenn jetz varible = " hallo " ist und vergleichstext = "hallo" ist erkennt er es dann als richtig an?!

Geschrieben
kann das so funktionieren???
Nein, das lässt sich ja nicht mal compilieren. Der Parameter ist vom Typ char, das ist ein einzelnes Zeichen. Wenn du eine Zeichenkette übergeben willst, sollte das schon char* sein.

Außerdem kannst du char-Zeiger-Strings nicht mit == vergleichen. Benutz strcmp.

das ist jetz mein komplettes programm...werden eventuell vorhandene leerzeichn ignoriert? wenn jetz varible = " hallo " ist und vergleichstext = "hallo" ist erkennt er es dann als richtig an?!
Würde mich wundern. In deinem Code ist nichts, was das bewirken würde. Oder erwartest du, dass das automatisch funktioniert?

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...