Ciągi w C: jak zadeklarować i zainicjować zmienne łańcuchowe w C
Co to jest ciąg w C?
A Ciąg w C to nic innego jak zbiór znaków w liniowej sekwencji. 'C' zawsze traktuje ciąg jako pojedyncze dane, nawet jeśli zawiera spacje. Pojedynczy znak jest definiowany za pomocą reprezentacji pojedynczego cudzysłowu. Ciąg jest reprezentowany za pomocą podwójnych cudzysłowów.
Example, "Welcome to the world of programming!"
„C” zapewnia standardową bibliotekę zawiera wiele funkcji, które można wykorzystać do łatwego wykonywania skomplikowanych operacji na ciągach znaków w języku C.
Jak zadeklarować ciąg w C?
AC String to prosta tablica z char jako typem danych. Język „C”. nie obsługuje bezpośrednio ciągu jako typu danych. Dlatego, aby wyświetlić ciąg znaków w C, musisz skorzystać z tablicy znaków.
Ogólna składnia deklarowania zmiennej jako ciągu w C jest następująca:
char string_variable_name [array_size];
Klasyczną deklarację ciągów można wykonać w następujący sposób:
char string_name[string_length] = "string";
Rozmiar tablicy należy zdefiniować podczas deklarowania zmiennej typu String w języku C, ponieważ służy on do obliczenia liczby znaków, które będą przechowywane w zmiennej łańcuchowej w języku C. Oto kilka prawidłowych przykładów deklaracji ciągu:
char first_name[15]; //declaration of a string variable char last_name[15];
Powyższy przykład reprezentuje zmienne łańcuchowe o rozmiarze tablicy 15. Oznacza to, że dana tablica ciągów C może pomieścić maksymalnie 15 znaków. Indeksowanie tablicy rozpoczyna się od 0, dlatego będzie przechowywać znaki z pozycji 0-14. Kompilator C automatycznie dodaje znak NULL „\0” do utworzonej tablicy znaków.
Jak zainicjować ciąg w C?
Przyjrzyjmy się inicjalizacji String w C. Poniższy przykład demonstruje inicjalizację String w C,
char first_name[15] = "ANTHONY"; char first_name[15] = {'A','N','T','H','O','N','Y','\0'}; // NULL character '\0' is required at end in this declaration char string1 [6] = "hello";/* string size = 'h'+'e'+'l'+'l'+'o'+"NULL" = 6 */ char string2 [ ] = "world"; /* string size = 'w'+'o'+'r'+'l'+'d'+"NULL" = 6 */ char string3[6] = {'h', 'e', 'l', 'l', 'o', '\0'} ; /*Declaration as set of characters ,Size 6*/
W string3 należy jawnie dodać znak NULL, a znaki są ujęte w pojedyncze cudzysłowy.
„C” pozwala nam także zainicjować plik a zmienna ciąg bez definiowania rozmiaru tablicy znaków. Można to zrobić w następujący sposób,
char first_name[ ] = "NATHAN";
Nazwa Strings w C działa jak wskaźnik, ponieważ jest to w zasadzie tablica.
Wejście ciągu C: Program C do odczytu ciągu
Podczas pisania programów interaktywnych, które proszą użytkownika o wprowadzenie danych, C udostępnia funkcje scanf(), gets() i fgets(), aby znaleźć wiersz tekstu wprowadzony przez użytkownika.
Kiedy do odczytu używamy funkcji scanf(), używamy specyfikatora formatu „%s” bez użycia znaku „&” w celu uzyskania dostępu do adresu zmiennej, ponieważ nazwa tablicy działa jak wskaźnik.
Na przykład:
#include <stdio.h> int main() { char name[10]; int age; printf("Enter your first name and age: \n"); scanf("%s %d", name, &age); printf("You entered: %s %d",name,age); }
Wyjście:
Enter your first name and age: John_Smith 48
Problem z funkcją scanf polega na tym, że nigdy nie czyta całych ciągów znaków w C. Zatrzymuje proces odczytu, gdy tylko pojawią się białe znaki, wysunięcie formularza, tabulator pionowy, znak nowej linii lub powrót karetki. Załóżmy, że podajemy dane wejściowe jako „Poradniki Guru99”, wówczas funkcja scanf nigdy nie odczyta całego ciągu, ponieważ pomiędzy dwiema nazwami występuje znak odstępu. Funkcja scanf będzie tylko czytać Guru99.
Aby odczytać ciąg zawierający spacje, używamy funkcji gets(). Pobiera ignoruje białe znaki. Zatrzymuje się
odczyt po osiągnięciu nowej linii (naciśnięcie klawisza Enter).
Na przykład:
#include <stdio.h> int main() { char full_name[25]; printf("Enter your full name: "); gets(full_name); printf("My full name is %s ",full_name); return 0; }
Wyjście:
Enter your full name: Dennis Ritchie My full name is Dennis Ritchie
Inną bezpieczniejszą alternatywą dla gets() jest funkcja fgets(), która odczytuje określoną liczbę znaków.
Na przykład:
#include <stdio.h> int main() { char name[10]; printf("Enter your name plz: "); fgets(name, 10, stdin); printf("My name is %s ",name); return 0;}
Wyjście:
Enter your name plz: Carlos My name is Carlos
Argumenty fgets() to:
- nazwa ciągu,
- ilość znaków do przeczytania,
- stdin oznacza czytanie ze standardowego wejścia, którym jest klawiatura.
Wyjście ciągu C: program C do drukowania ciągu
Standardowa funkcja printf służy do drukowania lub wyświetlania ciągów znaków w języku C na urządzeniu wyjściowym. Używany specyfikator formatu to %s
Przykład,
printf("%s", name);
Wyjście ciągu znaków odbywa się za pomocą funkcji fputs() i printf().
funkcja fput().
Funkcja fputs() potrzebuje nazwy ciągu i wskaźnika do miejsca, w którym chcesz wyświetlić tekst. Używamy stdout, które odnosi się do standardowego wyjścia w celu wydrukowania na ekranie.
Na przykład:
#include <stdio.h> int main() {char town[40]; printf("Enter your town: "); gets(town); fputs(town, stdout); return 0;}
Wyjście:
Enter your town: New York New York
stawia funkcję
Funkcja puts służy do drukowania ciągu w C na urządzeniu wyjściowym i przesuwania kursora z powrotem do pierwszej pozycji. Funkcji puts można używać w następujący sposób:
#include <stdio.h> int main() { char name[15]; gets(name); //reads a string puts(name); //displays a string return 0;}
Składnia tej funkcji jest stosunkowo prosta niż innych funkcji.
Biblioteka ciągów
Standardowa biblioteka „C” udostępnia różne funkcje służące do manipulowania ciągami znaków w programie. Funkcje te nazywane są także procedurami obsługi ciągów. Wszyscy ci handlarze są obecni w środku plik nagłówkowy.
Funkcjonować | Cel |
---|---|
stren() | Ta funkcja służy do znajdowania długości łańcucha. Zwraca liczbę znaków występujących w ciągu znaków, z wyłączeniem znaku NULL. |
strcat(str1, str2) | Ta funkcja służy do łączenia dwóch ciągów znaków w jeden ciąg. Dołącza lub łączy str2 na końcu str1 i zwraca wskaźnik do str1. |
strcmp(str1, str2) | Funkcja ta służy do porównywania ze sobą dwóch ciągów znaków. Zwraca 0, jeśli str1 jest równe str2, mniej niż 0, jeśli str1 < str2 i większe niż 0, jeśli str1 > str2. |
Rozważmy poniższy program demonstrujący funkcje biblioteki ciągów:
#include <stdio.h> #include <string.h> int main () { //string initialization char string1[15]="Hello"; char string2[15]=" World!"; char string3[15]; int val; //string comparison val= strcmp(string1,string2); if(val==0){ printf("Strings are equal\n"); } else{ printf("Strings are not equal\n"); } //string concatenation printf("Concatenated string:%s",strcat(string1,string2)); //string1 contains hello world! //string length printf("\nLength of first string:%d",strlen(string1)); printf("\nLength of second string:%d",strlen(string2)); //string copy printf("\nCopied string is:%s\n",strcpy(string3,string1)); //string1 is copied into string3 return 0; }
Wyjście:
Strings are not equal Concatenated string:Hello World! Length of first string:12 Length of second string:7 Copied string is:Hello World!
Inne ważne funkcje biblioteki to:
- strncmp(str1, str2, n): zwraca 0, jeśli pierwsze n znaków str1 jest równe pierwszym n znakom str2, mniejsze niż 0, jeśli str1 < str2 i większe niż 0, jeśli str1 > str2.
- strncpy(str1, str2, n) Ta funkcja służy do kopiowania łańcucha z innego ciągu. Kopiuje pierwszych n znaków str2 do str1
- strchr(str1, c): zwraca wskaźnik do pierwszego wystąpienia znaku c w str1 lub NULL, jeśli znak nie został znaleziony.
- strrchr(str1, c): przeszukuje str1 w odwrotnej kolejności i zwraca wskaźnik do pozycji znaku c w str1 lub NULL, jeśli znaku nie znaleziono.
- strstr(str1, str2): zwraca wskaźnik do pierwszego wystąpienia str2 w str1 lub NULL, jeśli nie znaleziono str2.
- strncat(str1, str2, n) Dołącza (łączy) pierwszych n znaków str2 na koniec str1 i zwraca wskaźnik do str1.
- strlwr(): aby przekonwertować ciąg znaków na małe litery
- strupr(): do konwersji ciągu znaków na wielkie litery
- strrev() : do odwrócenia ciągu
Konwersja ciągu na liczbę
W programowaniu C możemy przekonwertować ciąg znaków numerycznych na wartość numeryczną, aby zapobiec błędowi wykonania. Biblioteka stdio.h zawiera następujące funkcje do konwersji ciągu na liczbę:
- int atoi(str) Zastępuje ASCII liczbą całkowitą; konwertuje str na odpowiadającą mu wartość int. Jeśli pierwszy znak nie jest liczbą lub nie napotkano żadnej liczby, zwracane jest 0.
- double atof(str) Oznacza znak ASCII oznaczający liczbę zmiennoprzecinkową, konwertuje str na odpowiadającą jej wartość double. Jeśli pierwszy znak nie jest liczbą lub nie występują żadne liczby, zwracana jest wartość 0.0.
- long int atol(str) Zastępuje ASCII wartością long int, konwertuje str na odpowiadającą jej wartość long int. Jeśli pierwszy znak nie jest liczbą lub nie występują żadne liczby, zwracane jest 0.
Poniższy program demonstruje funkcję atoi():
#include <stdio.h> int main() {char *string_id[10]; int ID; printf("Enter a number: "); gets(string_id); ID = atoi(string_id); printf("you enter %d ",ID); return 0;}
Wyjście:
Enter a number: 221348 you enter 221348
- Deklaracja wskaźnika ciągu znaków, taka jak char *string = „język”, jest stałą i nie można jej modyfikować.
Podsumowanie
- Łańcuch to sekwencja znaków przechowywana w tablicy znaków.
- Ciąg znaków to tekst ujęty w podwójne cudzysłowy.
- Znak taki jak „d” nie jest ciągiem znaków i jest oznaczony pojedynczym cudzysłowem.
- „C” zapewnia standardowe funkcje biblioteczne umożliwiające manipulowanie ciągami znaków w programie. Manipulatory ciągów są przechowywane w plik nagłówkowy.
- Przed użyciem łańcucha w programie należy go zadeklarować lub zainicjować.
- Istnieją różne funkcje ciągu wejściowego i wyjściowego, każda z nich ma swoje cechy.
- Nie zapomnij dołączyć biblioteki ciągów, aby móc pracować z jej funkcjami
- Możemy przekonwertować ciąg na liczbę za pomocą metod atoi(), atof() i atol(), które są bardzo przydatne w procesach kodowania i dekodowania.
- Możemy manipulować różnymi ciągami, definiując tablicę ciągów w C.