Низове в C: Как да декларирате и инициализирате низови променливи в C
Какво е String в C?
A Низ в C не е нищо друго освен колекция от знаци в линейна последователност. 'C' винаги третира низ като единични данни, въпреки че съдържа бели интервали. Единичен знак се дефинира с помощта на представяне в единични кавички. Низът се представя с помощта на двойни кавички.
Example, "Welcome to the world of programming!"
'C' предоставя стандартна библиотека който съдържа много функции, които могат да се използват за лесно извършване на сложни операции върху низове в C.
Как да декларирам низ в C?
AC String е прост масив с char като тип данни. Език "C". не поддържа директно низ като тип данни. Следователно, за да покажете низ в C, трябва да използвате масив от знаци.
Общият синтаксис за деклариране на променлива като низ в C е следният,
char string_variable_name [array_size];
Класическата декларация на низове може да се направи по следния начин:
char string_name[string_length] = "string";
Размерът на масив трябва да бъде дефиниран, докато се декларира променлива C String, тъй като се използва за изчисляване колко знака ще бъдат съхранени в променливата string в C. Някои валидни примери за декларация на низ са както следва,
char first_name[15]; //declaration of a string variable char last_name[15];
Горният пример представлява низови променливи с размер на масива 15. Това означава, че даденият C низов масив може да съдържа най-много 15 знака. Индексирането на масива започва от 0, следователно ще съхранява знаци от позиция 0-14. C компилаторът автоматично добавя NULL символ '\0' към създадения масив от знаци.
Как да инициализирате низ в C?
Нека проучим инициализацията на String в C. Следващият пример демонстрира инициализацията на String в 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*/
В string3 знакът NULL трябва да бъде добавен изрично и знаците са оградени в единични кавички.
'C' също ни позволява да инициализираме a низова променлива без дефиниране на размера на масива от знаци. Може да се направи по следния начин,
char first_name[ ] = "NATHAN";
Името на низовете в C действа като указател, защото в основата си е масив.
C String Input: C програма за четене на низ
Когато пишете интерактивни програми, които искат от потребителя въвеждане, C предоставя функциите scanf(), gets() и fgets() за намиране на ред текст, въведен от потребителя.
Когато използваме scanf() за четене, използваме спецификатора на формата „%s“, без да използваме „&“ за достъп до адреса на променливата, тъй като име на масив действа като указател.
Например:
#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); }
Изход:
Enter your first name and age: John_Smith 48
Проблемът с функцията scanf е, че тя никога не чете цели низове в C. Тя ще спре процеса на четене веднага щом се появи празно пространство, подаване на формуляр, вертикален раздел, нов ред или връщане на каретка. Да предположим, че даваме вход като „Guru99 Tutorials“, тогава функцията scanf никога няма да прочете цял низ, тъй като между двете имена се появява празен знак. Функцията scanf ще чете само Guru99.
За да прочетем низ, който съдържа интервали, използваме функцията gets(). Gets игнорира белите интервали. Спира
четене при достигане на нов ред (натиснат клавиш Enter).
Например:
#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; }
Изход:
Enter your full name: Dennis Ritchie My full name is Dennis Ritchie
Друга по-безопасна алтернатива на gets() е функцията fgets(), която чете определен брой знаци.
Например:
#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;}
Изход:
Enter your name plz: Carlos My name is Carlos
Аргументите на fgets() са:
- името на низа,
- броя знаци за четене,
- stdin означава четене от стандартния вход, който е клавиатурата.
C String Output: C програма за отпечатване на низ
Стандартната функция printf се използва за отпечатване или показване на низове в C на изходно устройство. Използваният спецификатор на формат е %s
Пример,
printf("%s", name);
Извеждането на низ се извършва с функциите fputs() и printf().
функция fputs().
Функцията fputs() се нуждае от името на низа и указател към мястото, където искате да покажете текста. Използваме stdout, който се отнася до стандартния изход, за да печатаме на екрана.
Например:
#include <stdio.h> int main() {char town[40]; printf("Enter your town: "); gets(town); fputs(town, stdout); return 0;}
Изход:
Enter your town: New York New York
поставя функция
Функцията puts се използва за отпечатване на низ в C на изходно устройство и преместване на курсора обратно на първата позиция. Функцията puts може да се използва по следния начин,
#include <stdio.h> int main() { char name[15]; gets(name); //reads a string puts(name); //displays a string return 0;}
Синтаксисът на тази функция е сравнително прост от другите функции.
Библиотеката с низове
Стандартната библиотека "C" предоставя различни функции за манипулиране на низовете в програмата. Тези функции се наричат също манипулатори на низове. Всички тези манипулатори присъстват вътре заглавен файл.
функция | Цел |
---|---|
strlen() | Тази функция се използва за намиране на дължина на низ. Връща колко знака присъстват в низ, с изключение на NULL знака. |
strcat(str1, str2) | Тази функция се използва за комбиниране на два низа заедно, за да се образува един низ. Добавя или свързва str2 към края на str1 и връща указател към str1. |
strcmp(str1, str2) | Тази функция се използва за сравняване на два низа един с друг. Връща 0, ако str1 е равно на str2, по-малко от 0, ако str1 < str2, и по-голямо от 0, ако str1 > str2. |
Нека разгледаме програмата по-долу, която демонстрира функциите на библиотеката с низове:
#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; }
Изход:
Strings are not equal Concatenated string:Hello World! Length of first string:12 Length of second string:7 Copied string is:Hello World!
Други важни функции на библиотеката са:
- strncmp(str1, str2, n) : връща 0, ако първите n знака от str1 са равни на първите n знака от str2, по-малко от 0, ако str1 < str2, и по-голямо от 0, ако str1 > str2.
- strncpy(str1, str2, n) Тази функция се използва за копиране на низ от друг низ. Копира първите n знака от str2 в str1
- strchr(str1, c): връща указател към първото срещане на char c в str1 или NULL, ако символът не е намерен.
- strrchr(str1, c): търси str1 в обратен ред и връща указател към позицията на char c в str1 или NULL, ако символът не е намерен.
- strstr(str1, str2): връща указател към първото срещане на str2 в str1 или NULL, ако str2 не е намерен.
- strncat(str1, str2, n) Добавя (конкатенира) първите n знака от str2 към края на str1 и връща указател към str1.
- strlwr() : за преобразуване на низ в малки букви
- strupr() : за преобразуване на низ в главни букви
- strrev() : за обръщане на низ
Преобразуване на низ в число
В програмирането на C можем да конвертираме низ от цифрови знаци в числова стойност, за да предотвратим грешка по време на изпълнение. Библиотеката stdio.h съдържа следните функции за преобразуване на низ в число:
- int atoi(str) Означава ASCII към цяло число; преобразува str в еквивалентната int стойност. 0 се връща, ако първият знак не е число или не се срещат числа.
- double atof(str) Означава ASCII да плава, преобразува str в еквивалентната двойна стойност. 0.0 се връща, ако първият знак не е число или не се срещат числа.
- long int atol(str) Означава ASCII в long int, Преобразува str в еквивалентната стойност на дълго цяло число. 0 се връща, ако първият знак не е число или не се срещат числа.
Следната програма демонстрира функцията 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;}
Изход:
Enter a number: 221348 you enter 221348
- Декларация на указател на низ като char *string = “language” е константа и не може да се променя.
Oбобщение
- Низът е поредица от символи, съхранени в масив от знаци.
- Низът е текст, ограден в двойни кавички.
- Символ като 'd' не е низ и се обозначава с единични кавички.
- 'C' предоставя стандартни библиотечни функции за манипулиране на низове в програма. Манипулаторите на низове се съхраняват в заглавен файл.
- Низът трябва да бъде деклариран или инициализиран, преди да се използва в програма.
- Има различни входни и изходни низови функции, всяка от тях има своите характеристики.
- Не забравяйте да включите библиотеката с низове, за да работите с нейните функции
- Можем да конвертираме низ в число чрез atoi(), atof() и atol(), които са много полезни за процеси на кодиране и декодиране.
- Можем да манипулираме различни низове, като дефинираме масив от низове в C.