Рядки в C: як оголосити та ініціалізувати рядкові змінні в C

Що таке String у C?

A Рядок на C це не що інше, як набір символів у лінійній послідовності. 'C' завжди розглядає рядок як окреме дане, навіть якщо він містить пробіли. Один символ визначається за допомогою одинарних лапок. Рядок представлено за допомогою подвійних лапок.

Example, "Welcome to the world of programming!"

'C' надає стандартну бібліотеку який містить багато функцій, які можна використовувати для легкого виконання складних операцій над рядками в C.

Як оголосити рядок у C?

Рядок AC — це простий масив із типом даних char. Мова «С». безпосередньо не підтримує рядок як тип даних. Отже, щоб відобразити рядок у C, вам потрібно використовувати масив символів.

Загальний синтаксис для оголошення змінної як рядка в C такий:

char string_variable_name [array_size];

Класичне оголошення рядків можна зробити наступним чином:

 char string_name[string_length] = "string";

Розмір масиву має бути визначено під час оголошення рядкової змінної C, оскільки він використовується для обчислення кількості символів, які зберігатимуться в рядковій змінній у 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";

Ім'я Strings у C діє як вказівник, тому що це в основному масив.

Введення рядка C: програма 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 навчальних посібників», тоді функція 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 на еквівалентне значення double. 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” є константою і не може бути змінено.

Резюме

  • Рядок — це послідовність символів, що зберігається в масиві символів.
  • Рядок — це текст, узятий у подвійні лапки.
  • Такий символ, як «d», не є рядком і позначається одинарними лапками.
  • 'C' надає стандартні бібліотечні функції для роботи з рядками в програмі. Маніпулятори рядків зберігаються в файл заголовка.
  • Перед використанням у програмі рядок має бути оголошено або ініціалізовано.
  • Існують різні рядкові функції введення та виведення, кожна з яких має свої особливості.
  • Не забудьте включити бібліотеку рядків для роботи з її функціями
  • Ми можемо перетворити рядок на число за допомогою atoi(), atof() і atol(), які дуже корисні для процесів кодування та декодування.
  • Ми можемо маніпулювати різними рядками, визначивши масив рядків у C.

Підсумуйте цей пост за допомогою: