Видалення лапок з рядка

C:
Видалення лапок з рядка

Як:

Щоб видалити лапки з рядка в C, ми переглядаємо рядок, копіюючи символи, які не є лапками, в новий рядок. Цей процес може бути налаштований так, щоб видаляти як лише ведучі та кінцеві лапки, так і всі лапки, що присутні в рядку. Нижче наведено ілюстративний приклад, що демонструє обидва підходи:

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

// Функція для видалення всіх лапок з рядка
void removeAllQuotes(char *source, char *dest) {
    while (*source) {
        if (*source != '"' && *source != '\'') {
            *dest++ = *source;
        }
        source++;
    }
    *dest = '\0'; // Нуль-термінувати результуючий рядок
}

// Функція для видалення лише початкових і кінцевих лапок з рядка
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'; // Нуль-термінувати результуючий рядок
}

int main() {
    char str1[] = "'Hello, World!'";
    char str2[] = "\"Programming in C\"";
    char noQuotes1[50];
    char noQuotes2[50];
    
    removeAllQuotes(str1, noQuotes1);
    printf("Видалено всі лапки: %s\n", noQuotes1);
    
    removeEdgeQuotes(str2, noQuotes2);
    printf("Видалено крайні лапки: %s\n", noQuotes2);
    
    return 0;
}

Приклад виводу:

Видалено всі лапки: Hello, World!
Видалено крайні лапки: Programming in C

Ці приклади показують, як впоратися як з видаленням усіх присутніх лапок в рядку, так і з цілеспрямованим видаленням лише початкових і кінцевих лапок.

Поглиблений розгляд

Концепція видалення лапок із рядків не має значної історичної глибини в C, крім своїх зв’язків із ранніми потребами обробки тексту. Прямолінійний підхід, продемонстрований тут, є універсальним, але неефективним для дуже великих рядків або високо продуктивних вимог, де може бути віддана перевага модифікації на місці або більш розширеним алгоритмам.

Альтернативи, як-от використання strpbrk для пошуку лапок і переміщення частини рядка без лапок, можуть бути ефективнішими, але вимагають глибшого розуміння вказівників і управління пам’яттю в C. Більше того, поява бібліотек регулярних виразів надала потужний інструментарій для маніпуляцій з рядками, включаючи видалення лапок. Однак ці бібліотеки, хоча і потужні, додають складність і навантаження, які можуть бути не необхідними для простіших завдань. Таким чином, прямий підхід, як показано, залишається цінним навиком для програмістів на C, поєднуючи простоту з ефективністю для багатьох загальних випадків використання.