Jak usunąć litery i znaki z łancucha?

0

Hej!
Próbuję usunąć z łańcucha wszystko co nie jest liczbą, oddzielając liczby spacją. Niestety nie chce mi to wyjść. Proszę o jakieś sugestie.

#include <iostream>

using namespace std;

char *zastap(const char *napis)
{
    char bufor;
    for(int i=0; i<=50; i++)
    {
        *(bufor+i);
        int znak = 33;
        if(*(napis+i) == (char)znak>(char)47 && (char)znak<(char)59)
            *(bufor+i) = *(napis+i);

        znak++;
    }
    return bufor;
}

int main()
{
    const char *napis = "123zł, 50     zł 632 zł 53zl";
    char *text = zastap(napis);
    cout << *text;
    system("pause");
    return 0;
}

0
#include <iostream>
// #include <cstdlib> - zawiera funkcję system()

using namespace std;

char *zastap(const char *napis)
{
    char bufor; // deklarujesz zmienna na jeden znak
    for (int i = 0; i <= 50; i++)
    {
        *(bufor + i); // traktujesz znak jako bufor na łańcuch
        int znak = 33;
        if (*(napis + i) == (char)znak>(char)47 && (char)znak<(char)59)
            *(bufor + i) = *(napis + i);

        znak++;
    }
    return bufor; // zwrasz jeden znak. zamiast wskaźnika
}

int main()
{
    const char *napis = "123zł, 50     zł 632 zł 53zl";
    char *text = zastap(napis); // i przypisujesz go do wskaźnika
    cout << *text;
    system("pause");
    return 0;
} 

Kod nie powinien się skompilować, przez niezgodność typów.
To co zwróci funkcja też jest lokalne więc nie można później tego używać.
Aby zwrócić wskaźnik do czegoś z funkcji, to coś, musi mieć dłuższy czas życia niż do końca funkcji,
a takie możliwości daje dynamiczna alokacja pamięci.

Pisząc w C++ korzystaj z std::string.

0

Użyj isdigit()

0
Złoty Ogórek napisał(a):

Użyj isdigit()

Ale to usunie takze spacje?

0

Dziena. A to dla potomnych, moze sie przydadzą takie bazgroły!

char *zastap(const char *napis)
{
    int size = strlen(napis);
    for(int i=0; i<size; i++)
    {
            if(isdigit(*(napis+i)))
            {
            cout << *(napis+i);
            if(!(isdigit(*(napis+i+1))))
            cout << " ";
            }
    }
}

#Edit;
Zamiast wypisywać liczby można je wrzucić do innej nowej tablicy (np dynamicznej) i zwrocic ja ;)

Jest jakas funkcja biblioteczna ktora sprawdza zamiast cyfr, a litery?

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