Введение
В этом лабораторном занятии вы научитесь создавать и манипулировать строками в программировании на языке C. Вы изучите различные методы определения строк, форматирования их с помощью printf, определения их длины с помощью strlen и сравнения с помощью strncmp. Эти основные операции со строками являются важными для создания надежных и гибких приложений на языке C.
В лабораторном занятии рассматриваются следующие шаги: определение строк с использованием указательной нотации, определение строк с использованием локальной массивной нотации, форматирование строк с помощью printf, определение длины строки с помощью strlen и сравнение строк с помощью strncmp. По завершении этого лабораторного занятия вы получите твердую базу знаний по работе со строками на языке C и сможете применять эти техники в своих собственных проектах.
Определение строк с использованием указательной нотации
В этом шаге вы научитесь определять строки с использованием указательной нотации в языке C. Указательная нотация предоставляет гибкий способ создания и манипуляции строками в программировании на языке C.
Сначала создадим новый файл, чтобы продемонстрировать определение строки с использованием указательной нотации:
cd ~/project
touch string_pointer.c
Теперь введите следующий код:
#include <stdio.h>
int main() {
// Define a string using pointer notation
char *greeting = "Hello, C Programming!";
// Print the string
printf("Greeting: %s\n", greeting);
return 0;
}
Скомпилируйте и запустите программу:
gcc string_pointer.c -o string_pointer
./string_pointer
Пример вывода:
Greeting: Hello, C Programming!
Разберем код на части:
char *greetingобъявляет указатель на символ (строку)"Hello, C Programming!"- это строковый литерал, хранящийся в памяти- Указатель
greetingуказывает на первый символ строки printf()использует спецификатор формата%sдля вывода всей строки
Вы также можете изменить указатель так, чтобы он указывал на разные части строки:
#include <stdio.h>
int main() {
char *greeting = "Hello, C Programming!";
// Point to a specific part of the string
char *partial = greeting + 7;
printf("Original string: %s\n", greeting);
printf("Partial string: %s\n", partial);
return 0;
}
Пример вывода:
Original string: Hello, C Programming!
Partial string: C Programming!
Определение строк с использованием локальной массивной нотации
В этом шаге вы научитесь определять строки с использованием локальной массивной нотации в языке C. Этот метод представляет собой альтернативный способ создания и инициализации строк с более прямым контролем над символьным массивом.
Создадим новый файл, чтобы продемонстрировать определение строки с использованием локальной массивной нотации:
cd ~/project
touch string_array.c
Введите следующий код:
#include <stdio.h>
int main() {
// Define a string using local array notation
char greeting[30] = "Hello, C Programming!";
// Print the string
printf("Greeting: %s\n", greeting);
return 0;
}
Скомпилируйте и запустите программу:
gcc string_array.c -o string_array
./string_array
Пример вывода:
Greeting: Hello, C Programming!
Рассмотрим некоторые варианты использования локальной массивной нотации:
#include <stdio.h>
int main() {
// Define an array with explicit initialization
char name[10] = {'J', 'o', 'h', 'n', '\0'};
// Define an array with partial initialization
char city[20] = "New York";
// Define an array without specifying size
char message[] = "Welcome to C Programming!";
printf("Name: %s\n", name);
printf("City: %s\n", city);
printf("Message: %s\n", message);
return 0;
}
Пример вывода:
Name: John
City: New York
Message: Welcome to C Programming!
Основные моменты о локальной массивной нотации:
- Вы можете явно указать размер массива
- Символ
'\0'(нулевой терминатор) важен для обозначения конца строки - Массивы могут быть инициализированы отдельными символами или строковыми литералами
- Если массив не полностью инициализирован, оставшиеся элементы устанавливаются в ноль
Форматирование строк с помощью printf
В этом шаге вы научитесь использовать функцию printf() для форматирования строк и различных типов данных в языке C. Функция printf() предоставляет мощные возможности по форматированию строк.
Создадим новый файл, чтобы продемонстрировать форматирование строк:
cd ~/project
touch string_formatting.c
Введите следующий код, чтобы изучить различные варианты форматирования:
#include <stdio.h>
int main() {
// Basic string formatting
char name[] = "Alice";
int age = 30;
float height = 5.8;
// Simple string output
printf("Name: %s\n", name);
// Formatting with multiple variables
printf("Profile: %s is %d years old\n", name, age);
// Formatting with floating-point precision
printf("Height: %.1f meters\n", height);
// Width and alignment
printf("Name (right-aligned): %10s\n", name);
printf("Name (left-aligned): %-10s\n", name);
// Mixing different format specifiers
printf("Details: %s, %d years, %.1f meters\n", name, age, height);
return 0;
}
Скомпилируйте и запустите программу:
gcc string_formatting.c -o string_formatting
./string_formatting
Пример вывода:
Name: Alice
Profile: Alice is 30 years old
Height: 5.8 meters
Name (right-aligned): Alice
Name (left-aligned): Alice
Details: Alice, 30 years, 5.8 meters
Общие спецификаторы формата:
%s: Строки%d: Целые числа%f: Числа с плавающей точкой%.1f: Числа с плавающей точкой с 1 знаком после запятой%10s: Выравнивание вправо с шириной в 10 символов%-10s: Выравнивание влево с шириной в 10 символов
Рассмотрим более продвинутые варианты форматирования:
#include <stdio.h>
int main() {
// Hexadecimal and octal representations
int number = 255;
printf("Decimal: %d\n", number);
printf("Hexadecimal: %x\n", number);
printf("Octal: %o\n", number);
// Padding with zeros
printf("Padded number: %05d\n", 42);
return 0;
}
Пример вывода:
Decimal: 255
Hexadecimal: ff
Octal: 377
Padded number: 00042
Определение длины строки с помощью strlen
В этом шаге вы научитесь использовать функцию strlen() для определения длины строк в языке C. Функция strlen() является частью библиотеки <string.h> и предоставляет простой способ подсчета количества символов в строке.
Создадим новый файл, чтобы продемонстрировать вычисление длины строки:
cd ~/project
touch string_length.c
Введите следующий код, чтобы изучить функцию strlen():
#include <stdio.h>
#include <string.h>
int main() {
// Define strings of different lengths
char greeting[] = "Hello, World!";
char name[] = "Alice";
char empty[] = "";
// Calculate and print string lengths
printf("Greeting: %s\n", greeting);
printf("Greeting length: %lu characters\n", strlen(greeting));
printf("Name: %s\n", name);
printf("Name length: %lu characters\n", strlen(name));
printf("Empty string length: %lu characters\n", strlen(empty));
return 0;
}
Скомпилируйте и запустите программу:
gcc string_length.c -o string_length
./string_length
Пример вывода:
Greeting: Hello, World!
Greeting length: 13 characters
Name: Alice
Name length: 5 characters
Empty string length: 0 characters
Рассмотрим более практический пример использования функции strlen():
#include <stdio.h>
#include <string.h>
int main() {
char input[100];
printf("Enter a string: ");
fgets(input, sizeof(input), stdin);
// Remove newline character if present
input[strcspn(input, "\n")] = 0;
// Calculate and print string length
size_t length = strlen(input);
printf("You entered: %s\n", input);
printf("String length: %lu characters\n", length);
// Demonstrate length-based operations
if (length > 10) {
printf("This is a long string!\n");
} else if (length > 0) {
printf("This is a short string.\n");
} else {
printf("You entered an empty string.\n");
}
return 0;
}
Основные моменты о функции strlen():
- Возвращает количество символов до нулевого терминатора
- Не учитывает нулевой терминатор
- Работает с символьными массивами и строковыми литералами
- Входит в состав библиотеки
<string.h>, поэтому необходимо подключить этот заголовочный файл - Возвращает тип
size_t(беззнаковое целое число типа long)
Сравнение строк с использованием strncmp
В этом шаге вы научитесь использовать функцию strncmp() для сравнения строк в языке C. Функция strncmp() позволяет сравнивать заданное количество символов между двумя строками.
Создадим новый файл, чтобы продемонстрировать сравнение строк:
cd ~/project
touch string_compare.c
Введите следующий код, чтобы изучить функцию strncmp():
#include <stdio.h>
#include <string.h>
int main() {
// Define strings for comparison
char str1[] = "Hello, World!";
char str2[] = "Hello, Everyone!";
char str3[] = "Hello, World!";
// Compare entire strings
printf("Full string comparison:\n");
int result1 = strncmp(str1, str2, strlen(str1));
int result2 = strncmp(str1, str3, strlen(str1));
printf("str1 vs str2: %d\n", result1);
printf("str1 vs str3: %d\n", result2);
// Compare first few characters
printf("\nPartial string comparison:\n");
int result3 = strncmp(str1, str2, 7);
printf("First 7 characters of str1 vs str2: %d\n", result3);
return 0;
}
Скомпилируйте и запустите программу:
gcc string_compare.c -o string_compare
./string_compare
Пример вывода:
Full string comparison:
str1 vs str2: -1
str1 vs str3: 0
Partial string comparison:
First 7 characters of str1 vs str2: 0
Создадим более практический пример сравнения строк:
#include <stdio.h>
#include <string.h>
int main() {
// Password verification example
char stored_password[] = "SecretPass123";
char input_password[20];
printf("Enter password: ");
scanf("%19s", input_password);
// Compare first 10 characters of the password
int comparison = strncmp(stored_password, input_password, 10);
if (comparison == 0) {
printf("Access granted!\n");
} else {
printf("Access denied!\n");
}
return 0;
}
Основные моменты о функции strncmp():
- Сравнивает до заданного количества символов
- Возвращает 0, если строки совпадают на заданной длине
- Возвращает отрицательное значение, если первая строка лексикографически меньше
- Возвращает положительное значение, если первая строка лексикографически больше
- Входит в состав библиотеки
<string.h> - Полезна для частичного сравнения строк
Понимание возвращаемых значений функции strncmp():
- 0: Строки равны на заданной длине
- < 0: Первая строка идет перед второй строкой
0: Первая строка идет после второй строки
Резюме
В этом практическом занятии вы научились определять строки как с использованием указательной нотации, так и локальной массивной нотации в программировании на языке C. С помощью указательной нотации вы можете гибко создавать и манипулировать строками, используя символьный указатель. С локальной массивной нотацией у вас есть более прямой контроль над символьным массивом. Вы также научились форматировать строки с помощью функции printf(), определять длину строки с помощью функции strlen() и сравнивать строки с помощью функции strncmp(). Эти техники манипуляции строками являются фундаментальными навыками для работы с текстовыми данными в языке C.



