Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: c++:n muuttujien "trimmaaminen"

Sivun loppuun

Profiili [22.03.2004 14:27:12]

#

Eli siis jos halutaan trimmata esim. kaikki muut merkit paitsi numerot jostain muuttujasta niin, miten se kannattaisi tehdä? omaako c++ jotain komentoa?

sqwiik [22.03.2004 15:30:52]

#

Eli mtäh? Tarkoitatko sellaista, joka poistaisi jotain merkkejä merkkijonosta, vai mitä tarkoitat muuttujan merkkien trimmaamisella?

Profiili [22.03.2004 18:28:38]

#

no siis meinaan ku esim php:ssä on trim() ni vastaava c:ssä, tarkotus ois saada kaikki muut paitsi numerot pois

Antti Laaksonen [22.03.2004 18:39:52]

#

Tässä on jonkinlainen C-kielinen toteutus asiasta. Toiminta perustuu siihen, että merkkijonoa voidaan käsitellä osoittimien avulla taulukon tapaan.

#include <stdio.h>

void saastanumerot(char *mj1, char *mj2);

int main(void) {
    char alku[20] = "  pois123mkk4  s   ", loppu[20];
    saastanumerot(alku, loppu);
    printf("%s", loppu); /* 1234 */
}

/* kopioi mj1:n numeromerkit mj2:seen */
void saastanumerot(char *mj1, char *mj2) {
    /* jatketaan, kunnes ollaan merkkijonon lopussa */
    while (*mj1 != '\0') {
        /* kopioidaan merkki merkkijonosta toiseen */
        *mj2 = *mj1;
        /* jos merkki on numeromerkki... */
        if (*mj1 >= '0' && *mj1 <= '9')
            /* kasvatetaan kirjoituskohtaa yhdellä */
            mj2++;
        /* kasvatetaan lukukohtaa yhdellä */
        mj1++;
    }
    /* laitetaan loppuun merkkijonon päätösmerkki */
    *mj2 = '\0';
}

thefox [23.03.2004 11:54:14]

#

Mielellään käytetään isdigit():ä koska sen pitäisi periaatteessa olla erittäin nopea. Lisäksi tuo funktio voisi ottaa myöskin merkkijonojen koot parametreina niin poistuisi puhveli overflown mahdollisuus. Varsinkin kun tässä tapauksessa on esimerkistä kysymys :-) Toisaalta, C++:ssa on kyllä varmasti aivan omat konstinsa tuon homman hoitamiseen.

Meitsi [30.03.2004 16:53:39]

#

Muuttujista kun on tässä juttua niin en viittiny alottaa uutta threadia. Onko muuttujissa kokorajotusta?
Toimiiko esim:

char tere[500000][500000];

tai:

char moro[9999999999999999];

iluwatar [31.03.2004 11:06:59]

#

Automaattiset muuttujat kuten nuo taulukot luodaan pinoon (engl. stack). Pinon koko määritellään kääntäjän asetuksissa. Esim. Visual C++ .NET pinon koko vakioasetuksilla on 1Mt. Nämä asetukset sallsivat sinun luoda taulukon jonka koko on 1024*1024 tavua.

Jos pinon koko tulee vastaan, täytyy muuttuja luoda dynaamisesti kekoon.

Meitsi [31.03.2004 15:27:12]

#

Mitenkäs sitä heappia sotten käytwtään? Olen kuullut ja nähnyt koodia mutten kässää?

firebug [31.03.2004 15:56:08]

#

Voit varata muistia keosta new:llä tai malloc():lla. Kumpikin palauttaa pointterin varattuun muistialueeseen. Eli esim.

int *luvut = new int[100];
*luvut = 1;       // ensimmäisen alkion arvoksi 1
*(luvut + 1) = 2; // toisen alkion arvoksi 2
luvut[3] = 3;     // kolmannen alkion arvoksi 3

delete [] luvut; //vapautetaan taulukko

luvut[3] tarkoittaa siis samaa kuin *(luvut + 2).

thefox [05.04.2004 20:21:59]

#

firebug kirjoitti:

luvut[3] tarkoittaa siis samaa kuin *(luvut + 2).

Eihän, kyllä luvut[3] tarkoittaa samaa kuin *(luvut + 3).

firebug [05.04.2004 21:05:39]

#

fawkz kirjoitti:

firebug kirjoitti:

luvut[3] tarkoittaa siis samaa kuin *(luvut + 2).

Eihän, kyllä luvut[3] tarkoittaa samaa kuin *(luvut + 3).

No niin tietenkin. Mitä sitä on taas tullut kirjoiteltua :)


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta