Čo je reťazec v jazyku C?
Reťazec v C nie je nič iné ako súbor znakov v lineárnej sekvencii. „C“ vždy zaobchádza s reťazcom ako s jedným údajom, aj keď obsahuje medzery. Jeden znak je definovaný pomocou vyjadrenia jednoduchej úvodzovky. Reťazec je vyjadrený pomocou dvojitých úvodzoviek.
Example, "Welcome to the world of programming!"
'C' poskytuje štandardnú knižnicu
V tomto návode sa naučíte
- Ako deklarovať a inicializovať reťazec v jazyku C.
- Reťazcový vstup: Prečítajte si reťazec
- Výstup reťazca: Tlač / zobrazenie reťazca
- funkcia fputs ()
- dáva funkciu
- Knižnica reťazcov
- Prevod reťazca na číslo
Ako deklarovať a inicializovať reťazec v jazyku C.
AC String je jednoduché pole s char ako dátovým typom. Jazyk „C“ priamo nepodporuje reťazec ako dátový typ. Preto, ak chcete zobraziť reťazec v jazyku C, musíte použiť pole znakov.
Všeobecná syntax pre deklarovanie premennej ako reťazca v jazyku C je nasledovná,
char string_variable_name [array_size];
Klasickú deklaráciu reťazcov je možné vykonať nasledovne:
char string_name[string_length] = "string";
Pri deklarovaní premennej typu C musí byť definovaná veľkosť poľa, pretože sa používa na výpočet počtu znakov, ktoré sa majú uložiť vo vnútri reťazcovej premennej v jazyku C. Niektoré platné príklady deklarácie reťazca sú nasledujúce,
char first_name[15]; //declaration of a string variablechar last_name[15];
Vyššie uvedený príklad predstavuje reťazcové premenné s veľkosťou poľa 15. To znamená, že dané pole reťazcov C je schopné pojať najviac 15 znakov. Indexovanie poľa začína od 0, preto bude ukladať znaky z polohy 0-14. Kompilátor C automaticky pridá NULL znak '\ 0' do vytvoreného poľa znakov.
Poďme študovať inicializáciu reťazcov v C. Nasledujúci príklad demonštruje inicializáciu reťazcov v 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*/
V reťazci 3 musí byť znak NULL pridaný explicitne a znaky musia byť uzavreté v úvodzovkách.
„C“ nám tiež umožňuje inicializovať reťazcovú premennú bez definovania veľkosti poľa znakov. Môže to byť vykonané nasledujúcim spôsobom,
char first_name[ ] = "NATHAN";
Názov reťazcov v jazyku C slúži ako ukazovateľ, pretože ide v podstate o pole.
Reťazcový vstup: Prečítajte si reťazec
Pri písaní interaktívnych programov, ktoré od používateľa požadujú vstup, poskytuje C funkcie scanf (), gets () a fgets () na vyhľadanie riadku textu zadaného od používateľa.
Keď na čítanie použijeme scanf (), použijeme špecifikátor formátu „% s“ bez použitia znaku „&“ na prístup k adrese premennej, pretože názov poľa slúži ako ukazovateľ. Napríklad:
#includeint 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);}
Výkon:
Enter your first name and age:John_Smith 48
Problém s funkciou scanf je v tom, že nikdy neprečíta celé reťazce v jazyku C. Proces čítania zastaví, akonáhle dôjde k prázdnemu miestu, posunu formulára, zvislej záložke, novému riadku alebo návratu na koniec riadku. Predpokladajme, že dáme vstup ako „Guru99 Tutorials“, potom funkcia scanf nikdy neprečíta celý reťazec, pretože medzi týmito dvoma názvami sa vyskytne medzera. Funkcia scanf bude čítať iba Guru99.
Aby sme mohli čítať, že reťazec obsahuje medzery, používame funkciu gets (). Získa ignoruje medzery. Po dosiahnutí nového riadku (pri stlačení klávesu Enter) sa čítanie zastaví. Napríklad:
#includeint main() {char full_name[25];printf("Enter your full name: ");gets(full_name);printf("My full name is %s ",full_name);return 0;}
Výkon:
Enter your full name: Dennis RitchieMy full name is Dennis Ritchie
Ďalšou bezpečnejšou alternatívou k get () je funkcia fgets (), ktorá načíta zadaný počet znakov. Napríklad:
#includeint main() {char name[10];printf("Enter your name plz: ");fgets(name, 10, stdin);printf("My name is %s ",name);return 0;}
Výkon:
Enter your name plz: CarlosMy name is Carlos
Argumenty fgets () sú:
- názov reťazca,
- počet znakov na čítanie,
- stdin znamená čítať zo štandardného vstupu, ktorým je klávesnica.
Výstup reťazca: Tlač / zobrazenie reťazca
Štandardná funkcia printf sa používa na tlač alebo zobrazenie reťazcov v jazyku C na výstupnom zariadení. Použitý špecifikátor formátu je% s
Príklad,
printf("%s", name);
Reťazcový výstup sa vykonáva pomocou funkcií fputs () a printf ().
funkcia fputs ()
Funkcia fputs () vyžaduje názov reťazca a ukazovateľ na miesto, kde chcete zobraziť text. Na tlač na obrazovku používame štandardný výstup, ktorý odkazuje na štandardný výstup. Napríklad:
#includeint main(){char town[40];printf("Enter your town: ");gets(town);fputs(town, stdout);return 0;}
Výkon:
Enter your town: New YorkNew York
dáva funkciu
Funkcia puts sa používa na tlač reťazca v jazyku C na výstupnom zariadení a na presun kurzora späť na prvú pozíciu. Funkciu put je možné použiť nasledujúcim spôsobom,
#includeint main() {char name[15];gets(name); //reads a stringputs(name); //displays a stringreturn 0;}
Syntax tejto funkcie je porovnateľne jednoduchá ako iné funkcie.
Knižnica reťazcov
Štandardná knižnica „C“ poskytuje rôzne funkcie na manipuláciu s reťazcami v rámci programu. Tieto funkcie sa tiež nazývajú obslužné rutiny reťazcov. Všetky tieto manipulátory sú prítomné v hlavičkovom súbore
Funkcia | Účel |
strlen () | Táto funkcia sa používa na zistenie dĺžky reťazca. Vráti koľko znakov je v reťazci okrem znaku NULL. |
strcat (str1, str2) | Táto funkcia sa používa na spojenie dvoch reťazcov do jedného reťazca. Pripojí alebo zreťazí str2 na koniec str1 a vráti ukazovateľ na str1. |
strcmp (str1, str2) | Táto funkcia sa používa na porovnanie dvoch reťazcov navzájom. Vráti 0, ak sa str1 rovná str2, menej ako 0, ak str1 |
Pozrime sa na program, ktorý nižšie demonštruje funkcie knižnice reťazcov:
#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;}
Výkon:
Strings are not equalConcatenated string:Hello World!Length of first string:12Length of second string:7Copied string is:Hello World!
Ďalšie dôležité knižničné funkcie sú:
- strncmp (str1, str2, n): vráti 0, ak sa prvých n znakov str1 rovná prvým n znakom str2, menej ako 0, ak str1
str2. - strncpy (str1, str2, n) Táto funkcia sa používa na kopírovanie reťazca z iného reťazca. Skopíruje prvých n znakov str2 do str1
- strchr (str1, c): vráti ukazovateľ na prvý výskyt znaku c v str1 alebo NULL, ak znak nebol nájdený.
- strrchr (str1, c): prehľadá str1 v opačnom poradí a vráti ukazovateľ na pozíciu char c v str1, alebo NULL, ak sa znak nenájde.
- strstr (str1, str2): vráti ukazovateľ na prvý výskyt str2 v str1 alebo NULL, ak str2 nebol nájdený.
- strncat (str1, str2, n) Pripojí (zreťazí) prvých n znakov str2 na koniec str1 a vráti ukazovateľ na str1.
- strlwr (): na prevedenie reťazca na malé písmená
- strupr (): na prevedenie reťazca na veľké písmená
- strrev (): obrátiť reťazec
Prevod reťazca na číslo
V programovaní v C môžeme previesť reťazec číselných znakov na číselnú hodnotu, aby sme zabránili chybe za behu. Knižnica stdio.h obsahuje nasledujúce funkcie na prevod reťazca na číslo:
- int atoi (str) Znamená pre ASCII celé číslo; prevádza str na ekvivalentnú hodnotu int. Ak prvý znak nie je číslo, alebo sa čísla nevyskytujú, vráti sa 0.
- double atof (str) Znamená to, že ASCII pláva, prevádza str na ekvivalentnú dvojnásobnú hodnotu. Ak prvý znak nie je číslo, alebo sa nenachádzajú žiadne čísla, vráti sa 0,0.
- long int atol (str) Znamená to, že ASCII je long int, Konvertuje str na ekvivalentnú celočíselnú hodnotu. Ak prvý znak nie je číslo, alebo sa čísla nevyskytujú, vráti sa 0.
Nasledujúci program demonštruje funkciu atoi ():
#includeint 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;}
Výkon:
Enter a number: 221348you enter 221348
- Deklarácia reťazcového ukazovateľa, ako napríklad char * string = "language", je konštanta a nemožno ju meniť.
Zhrnutie
- Reťazec je postupnosť znakov uložených v poli znakov.
- Reťazec je text uzavretý v dvojitých úvodzovkách.
- Znak ako „d“ nie je reťazec a je označený jednoduchými úvodzovkami.
- „C“ poskytuje štandardné knižničné funkcie na manipuláciu s reťazcami v programe. Manipulátory s reťazcami sú uložené v hlavičkovom súbore
. - Pred použitím v programe musí byť reťazec deklarovaný alebo inicializovaný.
- Existujú rôzne funkcie vstupných a výstupných reťazcov, pričom každá z nich má svoje vlastnosti.
- Nezabudnite zahrnúť knižnicu reťazcov, aby ste mohli pracovať s jej funkciami
- Reťazec môžeme previesť na číslo pomocou atoi (), atof () a atol (), ktoré sú veľmi užitočné pre procesy kódovania a dekódovania.
- S rôznymi reťazcami môžeme manipulovať definovaním poľa reťazcov v C.