Lainausmerkkien poistaminen merkkijonosta

C:
Lainausmerkkien poistaminen merkkijonosta

Miten:

Lainausmerkkien poistaminen merkkijonosta C-kielessä tapahtuu käymällä merkkijono läpi ja kopioimalla hahmot, jotka eivät ole lainausmerkkejä, uuteen merkkijonoon. Tätä prosessia voidaan räätälöidä poistamaan joko vain johtavat ja päättyvät lainausmerkit tai kaikki merkkijonossa olevat lainausmerkit. Alla on havainnollistava esimerkki, joka osoittaa molemmat lähestymistavat:

#include <stdio.h>
#include <string.h>

// Funktio kaikkien lainausmerkkien poistamiseksi merkkijonosta
void removeAllQuotes(char *source, char *dest) {
    while (*source) {
        if (*source != '"' && *source != '\'') {
            *dest++ = *source;
        }
        source++;
    }
    *dest = '\0'; // Lopeta kohdemerkkijono nolla-terminaattorilla
}

// Funktio vain johtavien ja päättyvien lainausmerkkien poistamiseksi merkkijonosta
void removeEdgeQuotes(char *source, char *dest) {
    size_t len = strlen(source);
    if (source[0] == '"' || source[0] == '\'') source++, len--;
    if (source[len-1] == '"' || source[len-1] == '\'') len--;
    strncpy(dest, source, len);
    dest[len] = '\0'; // Lopeta kohde merkkijono nolla-terminaattorilla
}

int main() {
    char str1[] = "'Hei, maailma!'";
    char str2[] = "\"Ohjelmointi C-kielessä\"";
    char eiLainausmerkkeja1[50];
    char eiLainausmerkkeja2[50];
    
    removeAllQuotes(str1, eiLainausmerkkeja1);
    printf("Kaikki lainausmerkit poistettu: %s\n", eiLainausmerkkeja1);
    
    removeEdgeQuotes(str2, eiLainausmerkkeja2);
    printf("Reuna lainausmerkit poistettu: %s\n", eiLainausmerkkeja2);
    
    return 0;
}

Esimerkkitulostus:

Kaikki lainausmerkit poistettu: Hei, maailma!
Reuna lainausmerkit poistettu: Ohjelmointi C-kielessä

Nämä esimerkit näyttävät, miten käsitellä sekä kaikkien merkkijonossa olevien lainausmerkkien poistoa että vain johtavien ja päättyvien lainausmerkkien kohdennettua poistoa.

Syvä sukellus

Käsitys lainausmerkkien poistamisesta merkkijonoista ei omaa merkittävää historiallista syvyyttä C:ssä, paitsi sen yhteydet varhaiseen tekstinkäsittelyn tarpeeseen. Täällä esitelty suoraviivainen lähestymistapa on monikäyttöinen, mutta se ei ole tehokas erittäin suurille merkkijonoille tai korkean suorituskyvyn vaatimuksille, joissa paikan päällä tapahtuva muokkaus tai kehittyneemmät algoritmit saattaisivat olla suositeltavia.

Vaihtoehdot, kuten strpbrk-funktion käyttäminen lainausmerkkien löytämiseksi ja lainausmerkeittömän osan merkkijonon siirtämiseki, voivat olla tehokkaampia, mutta edellyttävät syvällisempää ymmärrystä osoittimista ja muistinhallinnasta C:ssä. Lisäksi säännöllisiä lausekkeita käsittelevien kirjastojen ilmestyminen on tarjonnut voimakkaan työkalupakin merkkijonojen käsittelyyn, mukaan lukien lainausmerkkien poisto. Kuitenkin nämä kirjastot, vaikka ovatkin tehokkaita, lisäävät monimutkaisuutta ja lisäkustannuksia, jotka eivät ehkä ole tarpeellisia yksinkertaisemmissa tehtävissä. Niinpä suoraan lähestymistapaan, kuten näytetty, pysyy arvokkaana taitona C-ohjelmoijille, yhdistellen yksinkertaisuutta tehokkuuden kanssa monissa yleisissä käyttötarkoituksissa.