Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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!!!!

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!!!

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:

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.

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

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);


} 

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.

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?!

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?

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.