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, поєднуючи простоту з ефективністю для багатьох загальних випадків використання.