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.