Hozzászólások
A kovetkezo prolemara kellene nekem valami egyszeru megoldas:
Van egy stringem pl. "{B}abc". Ebben a stringben kellene lecserelni a {B} reszt egy megadott masik stringre. Van erre valami C konyvtari fuggveny?
Valami olyasmi kellene mint a vi-ban a %s/{B}/d/g
- A hozzászóláshoz be kell jelentkezni
Nem tudok róla hogy lenne ilyen fgv, de már abbahagytam a c-t mióta a Python-t megismertem. De azért nem vészes egy ilyet megírni.
Az strstr() fgv-t használhatod arra, hogy megkeress egy sztringet egy másikban. Innentől csak az a dolgod, hogy egy ciklusban megkeresgeted a keresett sztringet, és a nem illeszkedő részeket + azt a sztringet amire cserélni akarod, azt egy másik sztringbe írod, megfelelő sorrendben persze.
Persze a string az char* :) Ja, és a fenti fgv a string.h-ban van. Ami kellhet még az strcat hozzáfűzni meg strcpy lenullázni a stringet. De mondom, már évek óta nem néztem rá a c-re sajna :)
- A hozzászóláshoz be kell jelentkezni
Én az strtok () függvénynek javaslom utánanézni. Feldarabol egy sztringet egy másik sztring, mint tokenek alapján. (Kb. mint a perl split, csak nem regexpet eszik, csak sima sztringet.)
Babszem.
- A hozzászóláshoz be kell jelentkezni
[code:1:f1a48fb651]
/* strstr example */
#include <stdio.h>
#include <string.h>
int main ()
{
char str[] ="This is a simple string";
char * pch;
pch = strstr (str,"simple");
strncpy (pch,"sample",5);
puts (str);
return 0;
}
[/code:1:f1a48fb651]
Egy pelda a netrol.
www.cplusplus.com
- A hozzászóláshoz be kell jelentkezni
En meg javaslom, hogy amit irtam meg se nezd...
Pihenek meg egy kicsit inkabb, mert elszegyeltem magam.
- A hozzászóláshoz be kell jelentkezni
[quote:a9b4108ed4="SDN"]En meg javaslom, hogy amit irtam meg se nezd...
Pihenek meg egy kicsit inkabb, mert elszegyeltem magam.
Miert mi ezzel a baj?
- A hozzászóláshoz be kell jelentkezni
Hat peldanak jo, de nem hasznalnam olyan helyen, ahol esetleg malicious user is megfordul. Arrol nem is beszelve, hogy a felulirasnal csak 5 char-t ir felul, pedig a "sample" 6 charbol all. (Mondjuk ugyugy e beture cserelne, ezert ez egy tipikus latens hiba. Tovabba a c-ben kevesbe jaratosak szamara pedig megjegyzem, hogy a "sample" string valojaban 7 char, mert a vegen van egy \0 terminalo karakter is, de ezt most szandekosan nem masoljuk at.)
Emellett rettentoen elhanyagolja azt az esetet, hogyha nem egyforma hosszu az eredeti es az uj resz, kulonos tekintettel arra, hogyha az uj string tullog az eredeti teljes string vegen. (puffer tuliras)
- A hozzászóláshoz be kell jelentkezni
[quote:9b4c384314="XMI"]Emellett rettentoen elhanyagolja azt az esetet, hogyha nem egyforma hosszu az eredeti es az uj resz, kulonos tekintettel arra, hogyha az uj string tullog az eredeti teljes string vegen. (puffer tuliras)
Ertem en. Engem az erdekelt volna, hogy eseteleg nincs-e egy olyan konyvtari fuggveny amely kb igy nezne ki:
newStr = strreplace("This is a {B} string","{B}", "sample");
Igy newStr-kent "This is a sample string" - et kapok
- A hozzászóláshoz be kell jelentkezni
Valami ilyesmi kell?
A csere() nem ellenorzi, hogy a buffer eleg nagy-e az uj string tarolasara, ezt esetleg javitsd ki.
[code:1:132fa308d8]
#include <stdio.h>
#include <string.h>
// nem ellenorzi a buffer hosszat!
void csere(char *buffer, const char *s, const char *mit, const char *mire)
{
const char *start = s;
const char *next;
buffer[0] = '\0';
while ((next=strstr(start, mit)) != NULL)
{
strncat(buffer, start, next - start);
strcat(buffer, mire);
start = next + strlen(mit);
}
}
int main(void)
{
char buffer[1024];
csere(buffer, "{B} <- ez az elso, ez a masodik: {B}", "{B}", "beeee");
printf("'%s'\n", buffer);
}
[/code:1:132fa308d8]
- A hozzászóláshoz be kell jelentkezni
[quote:ad98f9b0e1="Kenny"]Valami ilyesmi kell?
A csere() nem ellenorzi, hogy a buffer eleg nagy-e az uj string tarolasara, ezt esetleg javitsd ki.
Koszonom!
Tokeletes.
- A hozzászóláshoz be kell jelentkezni
Koszonom!
Tokeletes.
Fraszkarikat tokeletes :)))
A fuggveny vegere ird oda, hogy
[code:1:7b4fdecbb4]
if (*start)
strcat(buffer, start);
[/code:1:7b4fdecbb4]
Kulonben csak akkor mukodik jol, ha a szoveg vege {B}
- A hozzászóláshoz be kell jelentkezni