Учебники

10) C Струны

Что такое строка?

Строка — это не что иное, как набор символов в линейной последовательности. ‘C’ всегда обрабатывает строку как отдельные данные, даже если она содержит пробелы. Один символ определяется с помощью представления в одинарных кавычках. Строка представлена ​​двойными кавычками.

Example, "Welcome to the world of programming!"

«C» предоставляет стандартную библиотеку <string.h>, которая содержит много функций, которые можно легко использовать для выполнения сложных операций со строками.

В этом уроке вы узнаете

Объявите и инициализируйте строку

Строка — это простой массив с типом данных char. Язык ‘C’ напрямую не поддерживает строку как тип данных. Следовательно, чтобы отобразить строку в ‘C’, вам нужно использовать массив символов.

Общий синтаксис объявления переменной в виде строки выглядит следующим образом:

char string_variable_name [array_size];

Классическое объявление строки может быть сделано следующим образом:

 char string_name[string_length] = "string"; 

Размер массива должен быть определен при объявлении строковой переменной, поскольку он используется для вычисления количества символов, которые будут храниться внутри строковой переменной. Вот некоторые допустимые примеры объявления строк:

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

В приведенном выше примере представлены строковые переменные с размером массива 15. Это означает, что данный массив символов может содержать максимум 15 символов. Индексация массива начинается с 0, следовательно, он будет хранить символы с позиции 0-14. Компилятор C автоматически добавляет символ NULL ‘\ 0’ в созданный массив символов.

Давайте изучим инициализацию строковой переменной. Следующий пример демонстрирует инициализацию строковой переменной,

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» также позволяет нам инициализировать строковую переменную без определения размера массива символов. Это можно сделать следующим образом,

char first_name[ ] = "NATHAN";

Имя строки действует как указатель, потому что это в основном массив.

Ввод строки: чтение строки

При написании интерактивных программ, которые запрашивают ввод у пользователя, 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 заключается в том, что она никогда не читает всю строку. Он остановит процесс чтения, как только появятся пробелы, подача формы, вертикальная табуляция, новая строка или возврат каретки. Предположим, мы вводим данные как «Учебники по Guru99», тогда функция scanf никогда не будет читать всю строку, так как между двумя именами появляется пробельный символ. Функция scanf будет читать только Guru99.

Чтобы прочитать строку, содержащую пробелы, мы используем функцию 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 означает чтение со стандартного ввода с клавиатуры.

Вывод строки: печать / отображение строки

Стандартная функция printf используется для печати или отображения строки на устройстве вывода. Используется спецификатор формата% s

Пример,

printf("%s", name);

Вывод строки осуществляется с помощью функций fputs () и printf ().

функция fputs ()

Для fputs () требуется имя строки и указатель на то место, где вы хотите отобразить текст. Мы используем стандартный вывод, который ссылается на стандартный вывод для печати на экран. Например:

#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

ставит функцию

Функция put печатает строку на устройстве вывода и перемещает курсор обратно на первую позицию. Функция put может быть использована следующим образом:

#include <stdio.h>
int main() {
char name[15];
gets(name);        //reads a string
puts(name);        //displays a string
return 0;}

Синтаксис этой функции сравнительно прост, чем другие функции.

Библиотека строк

Стандартная библиотека ‘C’ предоставляет различные функции для управления строками в программе. Эти функции также называются строковыми обработчиками. Все эти обработчики присутствуют в заголовочном файле <string.h>.

функция Цель
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 в эквивалентное значение long integer. 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» предоставляет стандартные библиотечные функции для работы со строками в программе. Строковые манипуляторы хранятся в заголовочном файле <string.h>.
  • Строка должна быть объявлена ​​или инициализирована перед использованием в программе.
  • Существуют различные функции ввода и вывода, каждая из которых имеет свои особенности.
  • Не забудьте включить библиотеку строк для работы с ее функциями
  • Мы можем преобразовать строку в число через atoi (), atof () и atol (), которые очень полезны для процессов кодирования и декодирования.
  • Мы можем манипулировать различными строками, определяя массив строк.