• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Porównywanie słów- palindrom

Mały hosting, OGROMNE możliwości
0 głosów
1,118 wizyt
pytanie zadane 24 listopada 2016 w C i C++ przez Paweł Celuch Początkujący (420 p.)
#include <stdio.h>
#include <stdlib.h>






void porownaj(char str1[],char str2[]){

int dl = strlen(str2);
char str3[30]=" ";
int i;
for(i=dl;i>=0;i--){
    str3[i]+=str2[i];
}

int cmp = strcmp(str1,str3);


if(cmp==0){
    printf("Jest palindromem");
}
else
    printf("nie palintrom");


}
int main()
{
    char str1[30];
    char str2[30];
       printf("Wypisz slowo: ");
    scanf("%s",str1);
    printf("Wypisz slowo: ");
    scanf("%s",str2);
    porownaj(str1,str2);

    return 0;
}

Program nie działa poprawnie. Nie mogę zamienić poprawnie słowa str2 na str3 i nie wiem jak to zrobić.

komentarz 25 listopada 2016 przez niezalogowany
Jeżeli któraś z odpowiedzi naprowadziła Cię na odpowiedź to wybierz najlepszą

5 odpowiedzi

0 głosów
odpowiedź 24 listopada 2016 przez niezalogowany
wybrane 26 listopada 2016 przez Paweł Celuch
 
Najlepsza

Nie za bardzo rozumiem po co podajesz 2 stringi do funkcji, która zwraca informację o tym czy słowo jest palindromem? Nie ma to trochę sensu, o palindromie pisałem niedawno tutaj: http://forum.pasja-informatyki.pl/199792/zadanie-problem-z-ifem

Poniżej pseudo-kod naiwnego algorytmu do wykrycia palindromu (z linku powyżej):

mystring = "abccba"
n = len(mystring)
 
tmp = ""
 
# def range(from, to, step) 
for i in range (n-1, 0, -1) do # zaczynamy od znaku n-1
  tmp += mystring[i]           # idziemy co obieg pętli o 1 w dół
done
 
if mystring == tmp then
  print "Palindrom"
else
  print "To nie jest palindorm"
fi

 

+2 głosów
odpowiedź 24 listopada 2016 przez fenq80 Bywalec (2,940 p.)
Wydaje mi się że problem tkwi w 15 linii.  Otóż  powinno być str3[i] = str2[i];
komentarz 25 listopada 2016 przez Paweł Celuch Początkujący (420 p.)
Też tak uważam, ale nie potrafię jej zmienić by działała poprawnie.
komentarz 25 listopada 2016 przez Paweł Celuch Początkujący (420 p.)
Dobra, już mam. Naprawione!
komentarz 26 listopada 2016 przez fenq80 Bywalec (2,940 p.)
Ciesze się.  Powodzenia w dalszym kodowaniu =D
0 głosów
odpowiedź 24 listopada 2016 przez niezalogowany
edycja 24 listopada 2016

Obróć jeden z podanych wyrazów i dopiero oba porównaj.

Właśnie uświadomiłem sobie swój błąd myślowy. Przepraszam.

0 głosów
odpowiedź 26 listopada 2016 przez Badzonor Obywatel (1,410 p.)

Naprawdę z pozoru wygląda dobrze. indecision

–2 głosów
odpowiedź 24 listopada 2016 przez lnkoc Stary wyjadacz (14,060 p.)
edycja 24 listopada 2016 przez lnkoc
str[30] według twojej definicji jest c-stringiem i składa się z dwóch znaków " " (spacji) i "/n" znaku nowej linii.

Jeśli chcesz sprawdzać czy nie jest palindromem nie inincjalizuj tej tablicy. W pętli for (int i = dl - 1; i <= 0; i--), gdzie długość jest równa wg tablicy dl - 1. Musisz przypisać każdy element str2[i] do odpowiedniego elementu (licząc od zera) str3. Co pozostawiam już twojej wyobraźni.

Edit: chyba tak to powinno wyglądać str3[dl - 1 - i]. Dla każdego elementu począwszy od zerowego przyspisujesz str2[i].

Podobne pytania

0 głosów
2 odpowiedzi 786 wizyt
pytanie zadane 19 stycznia 2020 w C i C++ przez Piotrek1122 Nowicjusz (140 p.)
0 głosów
1 odpowiedź 680 wizyt
pytanie zadane 24 października 2019 w C i C++ przez MagdaS Nowicjusz (140 p.)
0 głosów
1 odpowiedź 568 wizyt
pytanie zadane 17 listopada 2018 w C i C++ przez Shimeo7 Obywatel (1,910 p.)

93,718 zapytań

142,631 odpowiedzi

323,263 komentarzy

63,266 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...