Jak odwrócić napis w tablicy znaków w C ?

Jak odwrócić napis w tablicy znaków w C ?
  • Rejestracja: dni
  • Ostatnio: dni
0

Nie mam pomysłu jak odwrócić ten napis, ponieważ nie znam rozmiaru tablicy, a w C niestety nie ma chyba takiego czegoś jak tablice.length ?

Kopiuj
#include <stdio.h>
#include <stdlib.h>

int main()
{
	char napis[1000];
	int rozmiar = 0;
	int i=0;
	printf("Podaj napis: ");
	scanf("%s", &napis);
	printf("Napisales: ");
	printf("%s", napis);
	printf("\nOdwrocony napis: ");

	//jak odwrocic napis
	printf("\n");
	system("PAUSE");
	return 0;
}
 
Endrju
  • Rejestracja: dni
  • Ostatnio: dni
0

Przecież to odkrycia długości takiego napisu służy strlen.

MA
  • Rejestracja: dni
  • Ostatnio: dni
0

a jeśli nie chcesz ułatwiać sobie życia, albo nie pozwolono ci include'ować string.h, to pamiętaj, że każda tablica charów (o ile poprawnie stworzona) kończy się znakiem \0
dzięki temu np. taka pętla:

Kopiuj
while(napis[i++] != '\0') rozmiar++; 

policzy ci długość twojego stringa ;)

ach, i wpisując przez scanf całego stringa nie potrzebujesz referencji, tj. kod

Kopiuj
scanf("%s", napis);

też zadziała.
Oraz to:

Kopiuj
 printf("Napisales: ");
        printf("%s", napis);

można połączyć:

Kopiuj
 printf("Napisales: %s", napis);

No i takie czepianie się, nie rozumiem dlaczego znak nowej linii dajesz na początku, zdecydowanie lepiej dawać na końcu wcześniejszego printa, taki zapis jest bardziej przejrzysty na przykład w takim przypadku: * "\nad" "ad\n" *

robcio
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Opole
  • Postów: 533
0

oto gotowe rozwiązanie:

Kopiuj
void reverse(char * tab, char * odwr) {
	int i,j;
	int lenghtTab = strlen(tab);
	for(i = 0, j = lenghtTab - 1); i < lenghtTab; i++, j--) {
		odwr[i] = tab[j];
	}
}
 

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.