Řetězce v C: Jak deklarovat a inicializovat řetězcové proměnné v C

Co je String v C?

A Řetězec v C není nic jiného než sbírka znaků v lineární sekvenci. 'C' vždy zpracovává řetězec jako jednotlivá data, i když obsahuje mezery. Jeden znak je definován pomocí reprezentace jednoduchých uvozovek. Řetězec je reprezentován dvojitými uvozovkami.

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.

Jak deklarovat řetězec v C?

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

Obecná syntaxe pro deklaraci 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é řetězce C, 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 variable
char 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 schopno pojmout maximálně 15 znaků. Indexování pole začíná od 0, proto bude ukládat znaky z pozice 0-14. Kompilátor jazyka C automaticky přidá do vytvořeného pole znaků znak NULL '\0'.

Jak inicializovat řetězec v C?

Pojďme si prostudovat inicializaci String v C. Následující příklad ukazuje inicializaci Stringů 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 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*/

V řetězci3 musí být znak NULL přidán explicitně a znaky jsou uzavřeny v jednoduchých uvozovkách.

'C' nám také umožňuje inicializovat a řetězcová proměnná bez definování velikosti pole znaků. Lze to provést následujícím způsobem,

char first_name[ ] = "NATHAN";

Název Strings v C funguje jako ukazatel, protože je to v podstatě pole.

Vstup řetězce C: Program C pro čtení řetězce

Při psaní interaktivních programů, které žádají uživatele o vstup, C poskytuje funkce scanf(), get() a fgets() k nalezení řádku textu zadaného uživatelem.

Když ke čtení používáme scanf(), používáme 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 <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);
}

Výstup:

Enter your first name and age:
John_Smith 48

Problém s funkcí scanf je v tom, že nikdy nečte celé řetězce v C. Zastaví proces čtení, jakmile se objeví mezery, posun z formuláře, svislý tabulátor, nový řádek nebo návrat vozíku. Předpokládejme, že zadáme vstup jako „Guru99 Tutorials“, pak funkce scanf nikdy nepřečte celý řetězec, protože mezi dvěma jmény se objeví mezera. Funkce scanf bude pouze číst Guru99.

Abychom mohli přečíst řetězec obsahující mezery, použijeme funkci gets(). Gets ignoruje mezery. Přestává to

čtení po dosažení nového řádku (stisknuta klávesa Enter).

Například:

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

Výstup:

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

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

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

Výstup:

Enter your name plz: Carlos
My 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 C: Program C pro tisk řetězce

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

Příklad,

printf("%s", name);

Výstup řetězce se provádí pomocí funkcí fputs() a printf().

funkce fputs().

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

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

Výstup:

Enter your town: New York
New York

klade funkci

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

#include <stdio.h>
int main() {
char name[15];
gets(name);        //reads a string
puts(name);        //displays a string
return 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í jako manipulátory řetězců. Všechny tyto manipulátory jsou přítomny uvnitř hlavičkový soubor.

funkce Účel
strlen() Tato funkce se používá pro zjištění délky řetězce. Vrátí, kolik znaků je přítomno v řetězci kromě znaku NULL.
strcat(str1, str2) Tato funkce se používá pro spojení dvou řetězců dohromady do jednoho ř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ů mezi sebou. Vrátí 0, pokud se str1 rovná str2, menší než 0, pokud str1 < str2, a větší než 0, pokud str1 > str2.

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

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

Výstup:

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

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

  • strncmp(str1, str2, n) : vrátí 0, pokud je prvních n znaků str1 rovných prvním n znakům str2, menší než 0, pokud str1 < str2, a větší než 0, pokud str1 > str2.
  • strncpy(str1, str2, n) Tato funkce se používá ke zkopí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 znaku c v str1, nebo NULL, pokud znak nebyl nalezen.
  • strrchr(str1, c): prohledává str1 obráceně a vrací ukazatel na pozici znaku 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ácení řetězce

Převod řetězce na číslo

V programování v jazyce 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řevede str na ekvivalentní hodnotu int. 0 je vráceno, pokud první znak není číslo nebo nejsou nalezena žádná čísla.
  • double atof(str) Znamená ASCII na float, převádí str na ekvivalentní hodnotu double. 0.0 je vráceno, pokud první znak není číslo nebo nejsou nalezena žádná čísla.
  • long int atol(str) Zastupuje ASCII na long int, Převádí str na ekvivalentní dlouhé celé číslo. 0 je vráceno, pokud první znak není číslo nebo nejsou nalezena žádná čísla.

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

Výstup:

Enter a number: 221348
you enter 221348
  • Deklarace ukazatele řetězce, jako je char *string = „jazyk“ je konstanta a nelze ji upravit.

Shrnutí

  • Řetězec je posloupnost znaků uložená v poli znaků.
  • Řetězec je text uzavřený do dvojitých uvozovek.
  • Znak jako 'd' není řetězec a je označen jednoduchými uvozovkami.
  • 'C' poskytuje standardní knihovní funkce pro manipulaci s řetězci v programu. Strunové manipulátory jsou uloženy v hlavičkový soubor.
  • Před použitím v programu musí být řetězec deklarován nebo inicializován.
  • Existují různé funkce vstupního a výstupního řetězce, každá z nich má své vlastnosti.
  • Pro práci s jejími funkcemi nezapomeňte zahrnout knihovnu řetězců
  • Řetězec můžeme převést 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.