C:
Usuwanie cudzysłowów z ciągu znaków
Jak to zrobić:
Aby usunąć cudzysłowy z ciągu znaków w C, przeszukujemy ciąg, kopiując znaki, które nie są cudzysłowami, do nowego ciągu. Proces ten można dostosować do usunięcia tylko początkowych i końcowych cudzysłowów lub wszystkich cudzysłowów obecnych w ciągu. Poniżej znajduje się przykład ilustrujący oba podejścia:
#include <stdio.h>
#include <string.h>
// Funkcja do usuwania wszystkich cudzysłowów z ciągu
void removeAllQuotes(char *source, char *dest) {
while (*source) {
if (*source != '"' && *source != '\'') {
*dest++ = *source;
}
source++;
}
*dest = '\0'; // Zakończ ciąg docelowy znakiem null
}
// Funkcja do usuwania tylko początkowych i końcowych cudzysłowów z ciągu
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'; // Zakończ ciąg docelowy znakiem null
}
int main() {
char str1[] = "'Hello, World!'";
char str2[] = "\"Programming in C\"";
char noQuotes1[50];
char noQuotes2[50];
removeAllQuotes(str1, noQuotes1);
printf("Usunięto wszystkie cudzysłowy: %s\n", noQuotes1);
removeEdgeQuotes(str2, noQuotes2);
printf("Usunięto cudzysłowy z obrzeży: %s\n", noQuotes2);
return 0;
}
Przykładowe wyjście:
Usunięto wszystkie cudzysłowy: Hello, World!
Usunięto cudzysłowy z obrzeży: Programming in C
Te przykłady pokazują, jak radzić sobie z usuwaniem wszystkich obecnych cudzysłowów z ciągu oraz z celowanym usuwaniem tylko początkowych i końcowych cudzysłowów.
Szczegółowe omówienie
Koncepcja usuwania cudzysłowów z ciągów znaków nie ma znaczącej historii w C, poza jej związkami z wczesnymi potrzebami przetwarzania tekstu. Proste podejście prezentowane tutaj jest wszechstronne, ale brakuje mu efektywności dla bardzo dużych ciągów znaków lub wymagań wysokiej wydajności, gdzie preferowane mogą być modyfikacje dokonane w miejscu lub bardziej zaawansowane algorytmy.
Alternatywy, takie jak użycie strpbrk
do znajdowania cudzysłowów i przesuwanie części ciągu bez cudzysłowów, mogą być bardziej efektywne, ale wymagają głębszego zrozumienia wskaźników i zarządzania pamięcią w C. Ponadto, pojawienie się bibliotek wyrażeń regularnych zapewniło potężny zestaw narzędzi do manipulacji ciągami, w tym usuwanie cudzysłowów. Jednak te biblioteki, mimo że potężne, dodają złożoności i obciążenia, które mogą nie być konieczne dla prostszych zadań. W konsekwencji, bezpośrednie podejście, jak pokazano, pozostaje cenną umiejętnością dla programistów C, łącząc prostotę z efektywnością dla wielu wspólnych przypadków użycia.