Palindrom w C bez użycia []

0

Mam do napisania program który wypisze podany string od tyłu (tzw. Palindrom). Nie mogę użyć w programie [] (takie wymaganie). Nie mam pomysłu w jaki sposób to zrobić więc prosiłbym o wsparcie. Nie potrzebuję gotowca ale samego pomysłu, bo w google niestety znalazłem same programy w C++ lub takie gdzie są użyte [ ].

#include <stdio.h>
#include <string.h>

 int main() 
 {
   int i = 0;
   int ile=0;
   
   const char* t1 = "Ala Ma Kota a kot Ma AlE"; // to musi  być.
   char* target = strdup(t1); //duplikat t1 żeby móc go edytować. Można zmienić

	ile=strlen(target); //długość string'a. Myślałem, że się przyda

	for(i=0;i<ile;i++)
	{
	//tu prawdopodobnie coś będzie
	}
	
   return 0;
 }
7

Zapewne chodzi o to, abyś skorzystał z własności *(a+b)a[b], czyli np. *(t1+1) zamiast t[1]

Jak chcesz ominąć zadanie w bardziej nietypowy sposób (uwaga, prowadzący może mieć kijek w tyłku i uznać, że miałeś spełnić ducha zadania, a nie jego literę), możesz użyć di- lub trigrafów.

a[1];
*(a+1);
a<:1:>; // digraph
a??(1??); // trigraph

Dalej poradzić sobie musisz sam. https://wandbox.org/permlink/wUYYEMmp2sMqdklf

4

Przy haśle typu "palindrom" zwykle się sprawdza czy dany tekst jest tym właśnie palindromem, a nie go wyświetla.
Samo wyświetlenie szybciej znajdziesz pod hasłem "string reverse".

Być może potrzebujesz obu tych rzeczy żeby użytkownik też mógł to stwierdzić sam.

3

Cóż, twoje przykładowe zdanie @Kuba0140 nie jest palindromem według definicji
Natomiast co do wykrywania, czy zdanie jest palindromem, to tak:

const char *sentence = "Marzena pokazała Zakopane z ram.";
  • definiujesz sobie 2 wskaźniki na char, jeden ustawiasz na początek, drugi na koniec zdania.
  • robisz porównanie, czy *pointerBegin == *pointerEnd, jeśli nie to wtedy zdanie na pewno nie jest palindromem. Tutaj uwaga na pułapkę wielkości znaków, i fakt, że na końcu zdania może być kropka (oraz teoretycznie na początku coś innego niż litera/cyfra)
  • przesuwasz wskaźniki, begin o 1 w przód, a end o 1 w tył i sprawdzasz, czy wskazują na literę/cyfrę. Jeśli nie wskazują, to ponawiasz przesunięcie aż dany wskaźnik znajdzie literę/cyfrę.
  • robisz porównanie czy *begin == *end, znów pamiętając o wielkości znaków.
  • warunkiem zakończenia pętli jest kiedy stanie się begin >= end
0

Ok, udało mi się to zrobić wykorzystując technikę podobną do MasterBLB ^^ Dziękuję bardzo <3

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