Czy w języku C istnieje gotowa funkcja odwracajaca lancuch znakow?

0

W jezyku Pascal znajde funkcje odwracajaca lanuch znakow. Czy w bibliotece standardowej znajduja sie taka funkcja? Przeszukalem i nie znalazlem i zamierzam sam sobie napisac, ale wole sie upewnic.

Pozdrawiam,

0

Wątpliwe. Napisz sam i tyle ;)

0
char* reverse(char* word) {
  
  char* line;
  if(( line = malloc(strlen(word) * sizeof(char)) ) == NULL )
    return NULL;

  int i = strlen(word)-1;
  
  for(i; i >= 0; i--)
    strncat(line, &word[i], 1);
     
  return line;
}

Napisalem. Znalazlem tez w sieci info, ze taka funkcja owszem jest, ale dla kompilatorow Turbo C, z ktorych chyba juz nikt nie korzysta.

0

Straszna ta funkcja, dodatkowo z błędem.

Tu masz inną wersję:

char* reverse(const char* word) 
{
	char* line;
	int c = strlen(word);

	if( ( line = (char*)malloc(c + 1) ) == NULL ) return NULL;

	char* p = line + c; 
	*p-- = 0;
	while(*word) *p-- = *word++;

	return line;
}
0

ale dla kompilatorow Turbo C
Skoro jest w Turbo C, jest duża szansa, że jest ta sama funkcja w C++ Builderze.

Z C99 też mało kto korzysta, a w tym jest ta funkcja...
Skoro jest w C99, powinna być w gcc, i to nie tylko w trybie C99.

Straszna ta funkcja, dodatkowo z błędem.
Twoja nie mniej straszniejsza... po co te wskaźniki, skoro można indeksować tablice?

0

Dzięki za konstruktywną krytykę.

  1. Bład z malloc rzeczywiscie jest bardzo powazny, dzieki za zwrocenie uwagi, poprawilem to tez w innym programie, ktory pisze i zapamietam na zawsze.
  2. To strncat wymyslilem na szybko, bo nie mialem pomyslu jak przekazac pojedynczy lancuch skladajacy sie z 1 znaku do c_stringa. Rozumiem, ze glupota polega na kompletnym marnowaniu zasobow przez wywolywanie funkcji?
  3. Postaram sie przerzucic na typowe wskazniki, na chwile obecna wydaja mi sie mniej czytelne niz tablice we wiekszosci zastosowan.
1
char *inplace_reverse(char *buf)
   {
    for(char *s=buf,*e=s+strlen(s)-1;e<s;++s,--e) { char ch=*e; *e=*s; *s=ch; }
    return buf;
   }

char *duplicate_reverse(char *s)
   {
    return inplace_reverse(strdup(s));
   }
0
[losowa nazwa] napisał(a)

Wątpliwe. Napisz sam i tyle ;)

Wątpliwa to jest twoja wiedza kolego. http://www.warpspeed.com.au/cgi-bin/inf2html.cmd?..\html\book\Toolkt40\XPG4REF.INF+275

1 użytkowników online, w tym zalogowanych: 0, gości: 1