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

Usunięcie spacji na charach i zapisywanie w nowej zmiennej

Object Storage Arubacloud
0 głosów
215 wizyt
pytanie zadane 25 listopada 2018 w C i C++ przez Padoski Użytkownik (990 p.)

Chce napisać program , który będzie sprawdzał czy ciąg znaków jest palindornem, czyli wyrazem brzmiącym tak samo od tyłu jak i przodu. Na forum są takie zadania ale tylko i wyłącznie dla słów a ja chce również sprawdzać dla zdań. Planowałem najpierw usunąć spację ze zdania i poźniej sprawdzac kolejno wyrazy aż do środka utworzonego "ciągu znaków". Tutaj mam pytanie jak usunąć spację ze zdania. np Ala ma kota i zrobić z tego alamakota i zapisać to w taki sposób bym mogl podac jako argument do nowej funkcji sprawdzającej kolejno litery. Czy da sie to zrobić na charach ? Nie wiem jak to zapisac.Help z gory dzieki

#include <iostream>

using namespace std;

void usuniecieSpacji(string);

int main()
{
  string zdanie;
  cout<<"Podaj zdanie do sprawdzenia: ";
  getline(cin, zdanie);
  usuniecieSpacji(zdanie);

}
void usuniecieSpacji(string x)
{
    for(int i=0; x[i]!='\0'; i++)
    {
        if(x[i]==' ')
        {

        }
    }
}

 

2 odpowiedzi

+2 głosów
odpowiedź 25 listopada 2018 przez niezalogowany
wybrane 25 listopada 2018 przez Padoski
 
Najlepsza
x.erase(std::remove(x.begin(), x.end(), ' '), x.end());
0 głosów
odpowiedź 25 listopada 2018 przez niezalogowany
By to zrobić zapisz to zdanie do stringa i w pętli sprawdzaj czy zdanie[i] == " ". Jeśli to spacja - pomijaj, jeśli nie, to dodawaj do stringa zdanie2. A co do zamienienia dużych liter na małe biblioteka ctype ma na to odpowiednie funkcje, polecam do tego google.

Czyli: w pętli usuwasz spacje i przy okazji sprawdzasz czy litera jest duża, jeśli tak zamieniasz na małą. A potem to już jak ze słowem
komentarz 25 listopada 2018 przez Padoski Użytkownik (990 p.)
#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

void przygotowaniezdania(string);
void sprawdzeniePalindromu(string);

int main()
{
  string zdanie;
  cout<<"Podaj zdanie do sprawdzenia: ";
  getline(cin, zdanie);
  przygotowaniezdania(zdanie);

}
void przygotowaniezdania(string x)
{
    for(int i=0; x[i]!='\0'; i++)
    {
        if(x[i]==' ')
        {
           x.erase(i,1);
        }
    }
    transform(x.begin(),x.end(),x.begin(),::tolower);
    sprawdzeniePalindromu(x);
}
void sprawdzeniePalindromu(string y)
{
    int dlugosc = y.length();
    for(int i = 0,j = dlugosc-1; i,j<=dlugosc/2 ;i++, j--)
    {
        if(y[i]!=y[j])
        {
            cout<<"Nie jest palindromem";
            break;
        }
    }
    cout<<"Jest palindromem";
}

Napisalem cos takiego, zaden blad nie wyskakuje, ale poprostu nie działa( za kazdym razem wypisuje ze jest palindromem), co jest nie tak w kodzie ?

komentarz 25 listopada 2018 przez niezalogowany

Namieszałeś w ostatniej pętli for.

Tak działa:

for(int i = 0,j = dlugosc-1; i < dlugosc;i++, j--)

 

komentarz 25 listopada 2018 przez Padoski Użytkownik (990 p.)
znaczy teraz to bez sensu jest chyba to co napisales, bo niepotrzebnie iterator i musi leciec do samego konca wyrazu, poniewaz np dla wyrazu anna wystarczylo by zeby sprawdzil do polowy czyli i<dlugosc/2. Jesli zle mysle to popraw mnie.
komentarz 25 listopada 2018 przez niezalogowany

Trochę racji masz, lecz twój for nadal nie działa. Zauważyłem dlaczego. Jako argumenty dla fora jako warunek zakończenia podajesz

 i , j<=dlugosc/2 ;   

Co nie oznacza, że albo i albo j jest mniejsze lub równe do długość / 2, ale że albo j jest mniejsze lub równe długość / 2, albo i == true, czyli pętla działa gdy i nie jest równe true, czyli jest liczbą różną od zera.

 

Podobne pytania

0 głosów
1 odpowiedź 263 wizyt
0 głosów
1 odpowiedź 1,935 wizyt
pytanie zadane 3 grudnia 2015 w C i C++ przez Kaydan Początkujący (260 p.)
0 głosów
1 odpowiedź 1,286 wizyt
pytanie zadane 29 października 2020 w C i C++ przez Billy Użytkownik (680 p.)

92,565 zapytań

141,417 odpowiedzi

319,602 komentarzy

61,950 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...