str_replace

TAPs für die SRP- und CRP-Serie
Benutzeravatar
Gerti
Nicht mehr bei Topfield-Europe
<b>Nicht mehr bei Topfield-Europe</b>
Beiträge: 15740
Registriert: Fr 9. Dez 2005, 00:16
Receivertyp: Vu+ Uno 4k
Wohnort: Hürth
Kontaktdaten:

str_replace

#1

Beitrag von Gerti » Di 3. Aug 2010, 20:10

Hi!

Hat jemand zufällig eine str_replace Funktion in c oder kann sowas schreiben?
Ich würde halt gerne den String und die zu suchenden und die ersetzende Zeichenfolge übergeben und die Funktion soll den String so verändern, dass halt die zu suchenden Zeichenfolgen alle durch die ersetzende Zeichenfolge ersetzt wird.

Bevor ich mir damit das Gehirn verdrehe, dachte ich mir, ich frage einfach mal nach...

Gruß,
Gerti

Benutzeravatar
Miq
Topfield-Freak
Topfield-Freak
Beiträge: 3330
Registriert: Fr 9. Dez 2005, 08:16

AW: str_replace

#2

Beitrag von Miq » Di 3. Aug 2010, 22:00

Nimmst Du auch RegExe :u: ?
Miq.

Benutzeravatar
Gerti
Nicht mehr bei Topfield-Europe
<b>Nicht mehr bei Topfield-Europe</b>
Beiträge: 15740
Registriert: Fr 9. Dez 2005, 00:16
Receivertyp: Vu+ Uno 4k
Wohnort: Hürth
Kontaktdaten:

AW: str_replace

#3

Beitrag von Gerti » Di 3. Aug 2010, 22:53

Hi!

Du meinst für reguläre Ausrücke?!
Klar, kann ich genauso gebrauchen, auch wenn reguläre Ausdrücke nicht meine Spezialität sind...

Gruß,
Gerti

Benutzeravatar
xyzzyx
TAPPortierer
TAP<font color=DarkRed>Portierer</font>
Beiträge: 2099
Registriert: Sa 6. Jun 2009, 18:35
Receivertyp: SRP-2100 (TMS), **** Duo²
Receiverfirmware: verschiedene
Kontaktdaten:

AW: str_replace

#4

Beitrag von xyzzyx » Mi 4. Aug 2010, 20:15

Hi,

habe nur eine, die bestimmte Zeichen durch Unterstriche ersetzt. Ist wahrscheinlich nur suboptimal, aber sie tut es. Vielleicht kann man das ja irgendwie um Strings erweitern.

Code: Alles auswählen

void zeichen_entfernen(char *s)
{
    char *ptr = s ;

    while(*s != '\0')
    {
        if (*s != ' ' && *s != '/' && *s != '-' && *s != ':' && *s != ';' && *s != '<' && *s != '=' && *s != '>' &&
            *s != '?' && *s != '!' && *s != '"' && *s != '#' && *s != '$' && *s != '%' && *s != '&' && *s != '\'' &&
            *s != '(' && *s != ')' && *s != '*' && *s != ',' && *s != '.' && *s != '\5')
            *ptr = *s;
	else
            *ptr = '_';
	ptr++;
        s++;
    }

    *ptr = '\0';
    s=ptr;
}
MfG,
xyzzyx

Die Liste meiner portierten und meiner eigenen TAPs findet man hier

:bounce: Download: Homepage :bounce: Installieren: TAPtoDate :bounce: Beschreibungen: Topfield TAP-Seite :bounce:

srupprecht
Quelle des Wissens
Quelle des Wissens
Beiträge: 1427
Registriert: Mi 1. Feb 2006, 10:10
Receivertyp: V U + Duo² 2xDualDVB-S2
Receiverfirmware: OpenVIX Apollo

AW: str_replace

#5

Beitrag von srupprecht » Mi 4. Aug 2010, 20:44

Man könnte sich ja auch was mit strstr und strcpy zusammen basteln.

Benutzeravatar
Gerti
Nicht mehr bei Topfield-Europe
<b>Nicht mehr bei Topfield-Europe</b>
Beiträge: 15740
Registriert: Fr 9. Dez 2005, 00:16
Receivertyp: Vu+ Uno 4k
Wohnort: Hürth
Kontaktdaten:

AW: str_replace

#6

Beitrag von Gerti » Mi 4. Aug 2010, 20:48

Hi!

@xyzzyx: So in der Art mache ich es im Moment auch...nur suche ich eigentlich etwas für ganze Ausrücke.

@srupptecht: Die Idee hatte ich auch schon, irgendwie klappte es aber nicht...
Muss ich morgen nochmal in Ruhe angehen...

Gruß,
Gerti

Benutzeravatar
xyzzyx
TAPPortierer
TAP<font color=DarkRed>Portierer</font>
Beiträge: 2099
Registriert: Sa 6. Jun 2009, 18:35
Receivertyp: SRP-2100 (TMS), **** Duo²
Receiverfirmware: verschiedene
Kontaktdaten:

AW: str_replace

#7

Beitrag von xyzzyx » Mi 4. Aug 2010, 20:58

Habe grad etwas ergoogelt ohne genauer zu schauen:

Code: Alles auswählen

#include <string.h>
#include <malloc.h>

/* replace will replace the first 'find' in 's' with 'replace'
 * return: NULL if 'find' is not found
 *         the result string allocated with 'malloc' on success
 */

char* replace(const char* s, const char* find, const char* replace)
{
	const char* p;
	char* ret;

	p = strstr(s, find);

	if (p == NULL)
		return NULL;

	ret = malloc(strlen(s) + strlen(replace) + 1 - strlen(find));

	if (ret == NULL)
		return NULL;

	if (p != s)
		strncpy(ret, s, p-s);

	strcpy(ret + (p-s), replace);
	strcat(ret, p + strlen(find));

	return ret;
}

int main() 
{
	char* s;

	s = replace("Meine Oma backt Kuchen", "backt", "isst");
	if (s != NULL) {
		puts(s);
		free(s);
	}
	s = replace("Meine Oma backt Kuchen", "Kuchen", "Kekse");
	if (s != NULL) {
		puts(s);
		free(s);
	}
	s = replace("Meine Oma backt Kuchen", "Meine", "Deine");
	if (s != NULL) {
		puts(s);
		free(s);
	}
	s = replace("Meine Oma backt Kuchen", "Findet", "nix");
	if (s != NULL) {
		puts("Ooops: should not happen !: ");
		puts(s);
		free(s);
	}
}
Die Speicherreservierung sollte man natürlich auf die TMS-Funktionen umbauen.
MfG,
xyzzyx

Die Liste meiner portierten und meiner eigenen TAPs findet man hier

:bounce: Download: Homepage :bounce: Installieren: TAPtoDate :bounce: Beschreibungen: Topfield TAP-Seite :bounce:

Antworten

Zurück zu „SRP/CRP TAP-Bereich“