Eli siis jos halutaan trimmata esim. kaikki muut merkit paitsi numerot jostain muuttujasta niin, miten se kannattaisi tehdä? omaako c++ jotain komentoa?
Eli mtäh? Tarkoitatko sellaista, joka poistaisi jotain merkkejä merkkijonosta, vai mitä tarkoitat muuttujan merkkien trimmaamisella?
no siis meinaan ku esim php:ssä on trim() ni vastaava c:ssä, tarkotus ois saada kaikki muut paitsi numerot pois
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'; }
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.
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];
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.
Mitenkäs sitä heappia sotten käytwtään? Olen kuullut ja nähnyt koodia mutten kässää?
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).
firebug kirjoitti:
luvut[3] tarkoittaa siis samaa kuin *(luvut + 2).
Eihän, kyllä luvut[3] tarkoittaa samaa kuin *(luvut + 3).
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 :)
Aihe on jo aika vanha, joten et voi enää vastata siihen.