Řetězce v C: Jak deklarovat proměnnou, inicializovat, tisknout, příklad

Obsah:

Anonim

Co je řetězec v C?

Řetězec v C není nic jiného než soubor znaků v lineární sekvenci. „C“ vždy zachází s řetězcem jako s jedním datem, přestože obsahuje mezery. Jeden znak je definován pomocí vyjádření jednoduché uvozovky. Řetězec je reprezentován pomocí uvozovek.

Example, "Welcome to the world of programming!"

'C' poskytuje standardní knihovnu , která obsahuje mnoho funkcí, které lze použít ke snadnému provádění komplikovaných operací na řetězcích v C.

V tomto výukovém programu se naučíte

  • Jak deklarovat a inicializovat řetězec v C.
  • Řetězcový vstup: Přečtěte si řetězec
  • Výstup řetězce: Tisk / zobrazení řetězce
    • funkce fputs ()
    • klade funkci
  • Knihovna řetězců
  • Převod řetězce na číslo

Jak deklarovat a inicializovat řetězec v C.

AC String je jednoduché pole s char jako datovým typem. Jazyk „C“ přímo nepodporuje řetězec jako datový typ. Chcete-li tedy zobrazit řetězec v jazyce C, musíte použít pole znaků.

Obecná syntaxe pro deklarování proměnné jako řetězce v C je následující,

char string_variable_name [array_size];

Klasickou deklaraci řetězců lze provést následovně:

 char string_name[string_length] = "string"; 

Velikost pole musí být definována při deklaraci proměnné C String, protože se používá k výpočtu, kolik znaků bude uloženo uvnitř proměnné řetězce v C. Některé platné příklady deklarace řetězce jsou následující,

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

Výše uvedený příklad představuje řetězcové proměnné s velikostí pole 15. To znamená, že dané pole řetězců C je schopné pojmout maximálně 15 znaků. Indexování pole začíná od 0, proto bude ukládat znaky z pozice 0-14. Kompilátor C automaticky přidá znak NULL '\ 0' do vytvořeného pole znaků.

Pojďme si prostudovat inicializaci řetězce v C. Následující příklad ukazuje inicializaci řetězců 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 řetězci 3 musí být znak NULL přidán explicitně a znaky jsou uzavřeny v jednoduchých uvozovkách.

Písmeno „C“ nám také umožňuje inicializovat řetězcovou proměnnou, aniž bychom definovali velikost pole znaků. To lze provést následujícím způsobem,

char first_name[ ] = "NATHAN";

Název řetězců v C funguje jako ukazatel, protože je to v podstatě pole.

Řetězcový vstup: Přečtěte si řetězec

Při psaní interaktivních programů, které od uživatele požadují vstup, poskytuje C funkce scanf (), gets () a fgets () k vyhledání řádku textu zadaného od uživatele.

Když používáme ke čtení scanf (), použijeme specifikátor formátu "% s" bez použití "&" pro přístup k adrese proměnné, protože název pole funguje jako ukazatel. Například:

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

Výstup:

Enter your first name and age:John_Smith 48

Problém s funkcí scanf spočívá v tom, že nikdy nečte celé řetězce v C. Zastaví proces čtení, jakmile dojde k mezerám, posunu formuláře, svislé tabulátoru, nové řádce nebo návratu na začátek řádku. Předpokládejme, že zadáme vstup jako „Guru99 Tutorials“, pak funkce scanf nikdy nečte celý řetězec, protože mezi těmito dvěma jmény se objeví znak mezery. Funkce scanf bude číst pouze Guru99.

Abychom mohli číst, že řetězec obsahuje mezery, používáme funkci gets (). Získá ignoruje mezery. Po dosažení nového řádku přestane číst (stiskne se klávesa Enter). Například:

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

Výstup:

Enter your full name: Dennis RitchieMy full name is Dennis Ritchie

Další bezpečnější alternativou funkce gets () je funkce fgets (), která čte zadaný počet znaků. Například:

#include int main() {char name[10];printf("Enter your name plz: ");fgets(name, 10, stdin);printf("My name is %s ",name);return 0;}

Výstup:

Enter your name plz: CarlosMy name is Carlos

Argumenty fgets () jsou:

  • název řetězce,
  • počet znaků ke čtení,
  • stdin znamená číst ze standardního vstupu, kterým je klávesnice.

Výstup řetězce: Tisk / zobrazení řetězce

Standardní funkce printf se používá pro tisk nebo zobrazení řetězců v C na výstupním zařízení. Použitý specifikátor formátu je% s

Příklad,

printf("%s", name);

Řetězcový výstup se provádí pomocí funkcí fputs () a printf ().

funkce fputs ()

Fputs () potřebuje název řetězce a ukazatel na místo, kde chcete zobrazit text. Pro tisk na obrazovku používáme standardní výstup, který odkazuje na standardní výstup. Například:

#include int main(){char town[40];printf("Enter your town: ");gets(town);fputs(town, stdout);return 0;}

Výstup:

Enter your town: New YorkNew York

klade funkci

Funkce puts se používá k tisku řetězce v C na výstupním zařízení a přesunutí kurzoru zpět na první pozici. Funkci put lze použít následujícím způsobem,

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

Syntaxe této funkce je poměrně jednoduchá než u jiných funkcí.

Knihovna řetězců

Standardní knihovna „C“ poskytuje různé funkce pro manipulaci s řetězci v programu. Tyto funkce se také nazývají obslužné rutiny řetězců. Všechny tyto obslužné rutiny jsou přítomny uvnitř souboru záhlaví .

Funkce Účel
strlen () Tato funkce se používá k vyhledání délky řetězce. Vrátí, kolik znaků je v řetězci kromě znaku NULL.
strcat (str1, str2) Tato funkce se používá pro kombinaci dvou řetězců dohromady a vytvoření jediného řetězce. Připojí nebo zřetězí str2 na konec str1 a vrátí ukazatel na str1.
strcmp (str1, str2) Tato funkce se používá k porovnání dvou řetězců navzájem. Vrátí 0, pokud str1 se rovná str2, menší než 0, pokud str1 str2.

Podívejme se na níže uvedený program, který demonstruje funkce knihovny řetězců:

#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ýstup:

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

Další důležité funkce knihovny jsou:

  • strncmp (str1, str2, n): vrací 0, pokud se prvních n znaků str1 rovná prvním n znakům str2, méně než 0, pokud str1 str2.
  • strncpy (str1, str2, n) Tato funkce se používá ke kopírování řetězce z jiného řetězce. Zkopíruje prvních n znaků str2 do str1
  • strchr (str1, c): vrací ukazatel na první výskyt char c v str1, nebo NULL, pokud znak nebyl nalezen.
  • strrchr (str1, c): prohledá str1 obráceně a vrátí ukazatel na pozici char c v str1, nebo NULL, pokud znak nebyl nalezen.
  • strstr (str1, str2): vrací ukazatel na první výskyt str2 v str1, nebo NULL, pokud str2 nebyl nalezen.
  • strncat (str1, str2, n) Připojí (zřetězí) prvních n znaků str2 na konec str1 a vrátí ukazatel na str1.
  • strlwr (): pro převod řetězce na malá písmena
  • strupr (): pro převod řetězce na velká písmena
  • strrev (): obrátit řetězec

Převod řetězce na číslo

V programování v C můžeme převést řetězec číselných znaků na číselnou hodnotu, abychom zabránili chybě za běhu. Knihovna stdio.h obsahuje následující funkce pro převod řetězce na číslo:

  • int atoi (str) Znamená ASCII na celé číslo; převádí str na ekvivalentní hodnotu int. Vrací se 0, pokud první znak není číslo nebo nejsou žádná čísla.
  • double atof (str) Znamená to, že ASCII se vznáší, převádí str na ekvivalentní dvojnásobnou hodnotu. 0.0 je vráceno, pokud první znak není číslo nebo nejsou nalezena žádná čísla.
  • long int atol (str) Značí ASCII na long int, Převede str na ekvivalentní hodnotu dlouhého celého čísla. Vrací se 0, pokud první znak není číslo nebo nejsou nalezena žádná čísla.

Následující program demonstruje funkci 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;}

Výstup:

Enter a number: 221348you enter 221348
  • Deklarace řetězcového ukazatele, například char * string = "language", je konstanta a nelze ji změnit.

souhrn

  • Řetězec je posloupnost znaků uložených v poli znaků.
  • Řetězec je text uzavřený do uvozovek.
  • Znak jako „d“ není řetězec a je označen jednoduchými uvozovkami.
  • 'C' poskytuje standardní funkce knihovny pro manipulaci s řetězci v programu. Řetězcové manipulátory jsou uloženy v záhlaví souboru .
  • Před použitím do programu musí být řetězec deklarován nebo inicializován.
  • Existují různé funkce vstupních a výstupních řetězců, každá z nich má své funkce.
  • Nezapomeňte zahrnout knihovnu řetězců, abyste mohli pracovat s jejími funkcemi
  • Můžeme převést řetězec na číslo pomocí atoi (), atof () a atol (), které jsou velmi užitečné pro procesy kódování a dekódování.
  • Můžeme manipulovat s různými řetězci definováním pole řetězců v C.