C:
Merkkien poistaminen vastaavan mallin mukaan
Miten:
C ei sisällä valmista funktiota merkkien suoraan poistamiseksi merkkijonosta mallin perusteella, toisin kuin jotkut korkeamman tason kielet. Voit kuitenkin helposti saavuttaa tämän tehtävän iteroimalla manuaalisesti merkkijonon yli ja rakentamalla uuden merkkijonon, joka ei sisällä ei-toivottuja merkkejä. Oletetaan esimerkiksi, että haluat poistaa kaikki numerot merkkijonosta. Voit tehdä sen seuraavasti:
#include <stdio.h>
#include <ctype.h>
void remove_digits(char * str) {
char * src = str, * dst = str;
while (* src) {
if (! isdigit((unsigned char)* src)) {
* dst++ = * src;
}
src++;
}
* dst = '\0';
}
int main() {
char str[] = "C-ohjelmointi 101: Perusteet!";
remove_digits(str);
printf("Tulos: %s\n", str);
return 0;
}
Esimerkkitulostus:
Tulos: C-ohjelmointi : Perusteet!
Tässä esimerkissä hyödynnetään isdigit
-funktiota ctype.h
-kirjastosta numeroiden tunnistamiseksi, siirtäen numerottomat merkit merkkijonon alkuun ja päättäen merkkijonon, kun kaikki merkit on arvioitu.
Syväluotaus
Esitelty ratkaisu käyttää kahden osoittimen lähestymistapaa samassa taulukossa ei-toivottujen merkkien tehokkaaseen suodattamiseen, mikä on ominaista C:n käytännönläheiselle muistinhallintafilosofialle. Tämä menetelmä on tehokas, koska se toimii paikan päällä, välttäen tarpeen lisämuistin varaukselle ja siten minimoimalla ylimääräisen kuorman.
Historiallisesti korkeamman tason merkkijonokäsittelyfunktioiden puuttuminen C:ssä on pakottanut ohjelmoijat kehittämään syvällistä ymmärrystä merkkijonokäsittelystä muistitasolla, johtaen innovatiivisiin lähestymistapoihin kuten yllä mainittuun. Vaikka tällä on etuna suurempi kontrolli ja tehokkuus, siihen liittyy suurempi virheiden riski, kuten puskurin ylivuodot ja yksi vähemmän virheet.
Nykyisessä kehityskontekstissa, etenkin turvallisuutta ja varmuutta korostavissa, kielet, jotka abstrahoivat pois tällaiset matalan tason toiminnot, saattavat olla suositeltavia merkkijonokäsittelytehtäviin. Siitä huolimatta näiden C-tekniikoiden ymmärtäminen ja hyödyntäminen on korvaamatonta skenaarioissa, jotka vaativat hienosäätöistä suorituskyvyn optimointia tai työskentelyä ympäristöissä, joissa C:n minimalistisuus ja nopeus ovat ensiarvoisen tärkeitä.