Ciągi w C: jak zadeklarować zmienną, zainicjować, wydrukować, przykład

Spisie treści:

Anonim

Co to jest ciąg w języku C?

Smyczkowy C to nic innego jak zbiór znaków w sekwencji liniowej. „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 '' udostępnia standardową bibliotekę , która zawiera wiele funkcji, których można użyć do łatwego wykonywania skomplikowanych operacji na ciągach znaków w C.

W tym samouczku nauczysz się:

  • Jak zadeklarować i zainicjować ciąg w C
  • Ciąg wejściowy: Czytaj ciąg
  • Wyjście ciągu: Wydrukuj / Wyświetl ciąg
    • Funkcja fputs ()
    • funkcja puts
  • Biblioteka ciągów
  • Konwersja ciągu na liczbę

Jak zadeklarować i zainicjować ciąg w C

AC String to prosta tablica z char jako typem danych. Język „C” nie obsługuje bezpośrednio ciągu znaków 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 String 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 C String, ponieważ służy ona do obliczania, ile znaków będzie przechowywanych w zmiennej ciągu w C. Niektóre prawidłowe przykłady deklaracji ciągu są następujące:

char first_name[15]; //declaration of a string variablechar last_name[15];

Powyższy przykład przedstawia zmienne łańcuchowe o rozmiarze tablicy 15. Oznacza to, że dana tablica łańcuchów C może pomieścić maksymalnie 15 znaków. Indeksowanie tablicy zaczyna się od 0, dlatego będzie przechowywać znaki z pozycji 0-14. Kompilator C automatycznie dodaje znak NULL „\ 0” do utworzonej tablicy znaków.

Przeanalizujmy inicjalizację String w C. Poniższy przykład demonstruje inicjalizację Strings 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 declarationchar 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 znak NULL należy dodać jawnie, a znaki są ujęte w pojedyncze cudzysłowy.

„C” pozwala nam również zainicjować zmienną łańcuchową 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.

Ciąg wejściowy: Czytaj ciąg

Podczas pisania programów interaktywnych, które proszą użytkownika o wprowadzenie danych, C udostępnia funkcje scanf (), gets () i fgets () w celu znalezienia wiersza tekstu wprowadzonego przez użytkownika.

Kiedy używamy scanf () do czytania, używamy specyfikatora formatu "% s" bez używania "&" do dostępu do adresu zmiennej, ponieważ nazwa tablicy działa jako wskaźnik. Na przykład:

#include 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);}

Wynik:

Enter your first name and age:John_Smith 48

Problem z funkcją scanf polega na tym, że nigdy nie czyta ona całych ciągów w C. Zatrzymuje ona proces czytania, gdy tylko pojawi się biały znak, wysuw strony, tabulator pionowy, znak nowej linii lub powrót karetki. Załóżmy, że podamy dane wejściowe jako „Guru99 Tutorials”, a funkcja scanf nigdy nie odczyta całego ciągu, ponieważ między dwiema nazwami występuje biały znak. Funkcja scanf odczyta tylko Guru99.

Aby odczytać ciąg zawierający spacje, używamy funkcji gets (). Pobiera ignoruje spacje. Przerywa czytanie po osiągnięciu nowej linii (naciśnięcie klawisza Enter), na przykład:

#include int main() {char full_name[25];printf("Enter your full name: ");gets(full_name);printf("My full name is %s ",full_name);return 0;}

Wynik:

Enter your full name: Dennis RitchieMy 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 int main() {char name[10];printf("Enter your name plz: ");fgets(name, 10, stdin);printf("My name is %s ",name);return 0;}

Wynik:

Enter your name plz: CarlosMy name is Carlos

Argumentami fgets () są:

  • nazwa ciągu,
  • liczba znaków do odczytania,
  • stdin oznacza odczyt ze standardowego wejścia, którym jest klawiatura.

Wyjście ciągu: Wydrukuj / Wyświetl ciąg

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żyty specyfikator formatu to% s

Przykład,

printf("%s", name);

Wyjście typu string jest wykonywane za pomocą funkcji fputs () i printf ().

Funkcja fputs ()

Fputs () potrzebuje nazwy łańcucha 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 int main(){char town[40];printf("Enter your town: ");gets(town);fputs(town, stdout);return 0;}

Wynik:

Enter your town: New YorkNew York

funkcja puts

Funkcja puts służy do drukowania łańcucha w języku C na urządzeniu wyjściowym i przenoszenia kursora z powrotem do pierwszej pozycji. Funkcji puts można użyć w następujący sposób,

#include int main() {char name[15];gets(name); //reads a stringputs(name); //displays a stringreturn 0;}

Składnia tej funkcji jest stosunkowo prosta niż innych funkcji.

Biblioteka ciągów

Standardowa biblioteka „C” udostępnia różne funkcje do manipulowania napisami w programie. Te funkcje są również nazywane programami obsługi ciągów. Wszystkie te programy obsługi są obecne w pliku nagłówkowym .

Funkcjonować Cel, powód
strlen () Ta funkcja służy do znajdowania długości łańcucha. Zwraca liczbę znaków obecnych w ciągu z wyłączeniem znaku NULL.
strcat (str1, str2) Ta funkcja służy do łączenia dwóch ciągów w jeden ciąg. Dołącza lub łączy str2 na końcu str1 i zwraca wskaźnik do str1.
strcmp (str1, str2) Ta funkcja służy do porównywania ze sobą dwóch ciągów. Zwraca 0, jeśli słowo1 jest równe słowo2, mniej niż 0, jeśli słowo1 słowo2.

Rozważmy poniższy program, który demonstruje funkcje biblioteki ciągów:

#include #include int main () {//string initializationchar string1[15]="Hello";char string2[15]=" World!";char string3[15];int val;//string comparisonval= strcmp(string1,string2);if(val==0){printf("Strings are equal\n");}else{printf("Strings are not equal\n");}//string concatenationprintf("Concatenated string:%s",strcat(string1,string2)); //string1 contains hello world!//string lengthprintf("\nLength of first string:%d",strlen(string1));printf("\nLength of second string:%d",strlen(string2));//string copyprintf("\nCopied string is:%s\n",strcpy(string3,string1)); //string1 is copied into string3return 0;}

Wynik:

Strings are not equalConcatenated string:Hello World!Length of first string:12Length of second string:7Copied string is:Hello World!

Inne ważne funkcje biblioteki to:

  • strncmp (słowo1, słowo2, n): zwraca 0, jeśli pierwsze n znaków słowa słowo1 jest równe pierwszym n znakom słowa2, mniej niż 0, jeśli słowo1 słowo2.
  • strncpy (str1, str2, n) Ta funkcja służy do kopiowania łańcucha z innego łańcucha. Kopiuje pierwsze n znaków str2 do str1
  • strchr (str1, c): zwraca wskaźnik do pierwszego wystąpienia char 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 nie znaleziono znaku.
  • strstr (str1, str2): zwraca wskaźnik do pierwszego wystąpienia str2 w str1 lub NULL, jeśli str2 nie został znaleziony.
  • strncat (str1, str2, n) Dołącza (łączy) pierwszych n znaków słowa str2 na koniec słowa str1 i zwraca wskaźnik do słowa str1.
  • strlwr (): konwertuje ciąg znaków na małe litery
  • strupr (): konwertuje ciąg znaków na wielkie litery
  • strrev (): odwrócić łańcuch

Konwersja ciągu na liczbę

W programowaniu w języku C możemy przekonwertować ciąg znaków numerycznych na wartość liczbową, aby zapobiec wystąpieniu błędu w czasie wykonywania. Biblioteka stdio.h zawiera następujące funkcje do konwersji ciągu znaków na liczbę:

  • int atoi (str) Oznacza ASCII na liczbę całkowitą; konwertuje str na równoważną wartość int. Jeśli pierwszy znak nie jest liczbą lub nie ma żadnych liczb, zwracane jest 0.
  • double atof (str) Oznacza ASCII do float, konwertuje str na równoważną wartość double. Wartość 0,0 jest zwracana, jeśli pierwszy znak nie jest liczbą lub nie ma żadnych liczb.
  • long int atol (str) Oznacza ASCII na long int, Konwertuje str na równoważną wartość long integer. Jeśli pierwszy znak nie jest liczbą lub nie ma żadnych liczb, zwracane jest 0.

Poniższy program demonstruje funkcję atoi ():

#include 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;}

Wynik:

Enter a number: 221348you enter 221348
  • Deklaracja wskaźnika ciągu, 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 to tekst ujęty w podwójne cudzysłowy.
  • Znak taki jak „d” nie jest łańcuchem i jest oznaczony pojedynczymi cudzysłowami.
  • „C” udostępnia standardowe funkcje biblioteczne do manipulowania łańcuchami znaków w programie. Manipulatory ciągów są przechowywane w pliku nagłówkowym .
  • Ciąg musi zostać zadeklarowany lub zainicjowany przed użyciem w programie.
  • Istnieją różne funkcje ciągów wejściowych i wyjściowych, a każda z nich ma swoje cechy.
  • Nie zapomnij dołączyć biblioteki ciągów do pracy z jej funkcjami
  • Możemy przekonwertować ciąg na liczbę za pomocą atoi (), atof () i atol (), które są bardzo przydatne w procesach kodowania i dekodowania.
  • Możemy manipulować różnymi ciągami znaków, definiując tablicę ciągów w C.