Mam ciąg: "[email protected]"
wydobywające podciągi w C
Szukam napisać program w C, który będzie dodatkowo wszystkie trzy podciągi ("foo"
, "bar"
i "baz"
) i umieścić każdy w jego własnym ciąg.
P.S. Nie martw się, to jest praca domowa , a nie.
Mam ciąg: "[email protected]"
wydobywające podciągi w C
Szukam napisać program w C, który będzie dodatkowo wszystkie trzy podciągi ("foo"
, "bar"
i "baz"
) i umieścić każdy w jego własnym ciąg.
P.S. Nie martw się, to jest praca domowa , a nie.
jeśli nie jest to praca domowa :-) niż strtok nie jest zalecane, jeśli nie można użyć C++ (dlaczego?), Należy użyć strtok_r (wersja reentrent)
Strtok utrzymuje statycznego bufora podczas tokenizing że zostanie nadpisany, gdy zostanie wywołany w innym miejscu z nowym ciągiem, który nie będzie NULL, co może spowodować przerwanie funkcjonalności, której szukasz. na przykład wplecione połączenia z różnymi ciągami.
Zamiast tego możesz użyć strsep, który jest podobny do strtok, ale bufor tymczasowy możesz zachować sam, na wypadek, gdybyś potrzebował do tokenizacji wielu ciągów znaków, np. z połączonymi połączeniami z różnymi ciągami.
W małych przypadkach problem ten prawdopodobnie nie powstanie, ale może w większych projektach.
EDYCJA: nie jest std c, więc upewnij się, że masz tę funkcję, zanim spróbujesz jej użyć. Wiem na pewno, że jest ona dostępna na BSD i ewentualnie inne UNIXów
EDIT: strsep i strtok_r wydają się mieć taką samą funkcjonalność
Ponieważ jest prosto C, może to być zabawa, aby ponownie jak ciągi są przechowywane i zakończone. Skoro masz jeden znak kończącego dla każdej sekcji, można po prostu uczynić go prawdziwym terminatorem („\ 0”) i zostawić sznurki w lokalu:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char **argv) {
char *s1,*s2,*s3, *test = "[email protected]";
char *buf=(char *)malloc(100);
char *p,c;
strcpy(buf, test);
s1 = p = buf;
while(c = *p) {
if (c == '$') { *p = '\0'; s2 = p+1; }
if (c == '@') { *p = '\0'; s3 = p+1; }
p++;
}
printf("s1 = %s\n",s1);
printf("s2 = %s\n",s2);
printf("s3 = %s\n",s3);
}
Nie chciałbym to zrobić w kodzie produkcji, w ten dzień i wiek. Ale droga powrotna, kiedy jeden rzut na pętlę i jedna kopia do przechowywania, byłaby uważana za dużą wygraną.
Darn, 2 przechodzi jeśli policzysz strcpy. Pętla "kopiuj i ustaw" jest pozostawiona jako ćwiczenie dla czytelnika. –
niż nie rób najpierw kopii :) – warren
Btw, wygląda na dup. – monksy
Czy zrobiłeś jakieś postępy? Prawdopodobnie uzyskasz więcej odpowiedzi, jeśli zadasz bardziej szczegółowe pytanie. Teraz prosisz kogoś o napisanie całego programu w polu odpowiedzi. – benzado