Функции для работы со строками

В языке Си есть достаточно много специальных функций, которые работают со строками

– последовательностями символом с нулевым символом на конце. Для использования этих

функций надо включить в программу заголовочный файл

#include <string.h>

Многие из этих функций достаточно опасны при неправильном использовании, ведь они не проверяют, достаточно ли выделено памяти для копирования, перемещения или другой операции, единственным признаком окончания строки для них является символ '\0' .

Длина строки – strlen

Это самая простая функция, которая определяет, сколько символов в переданной ей строке (не считая '\0'). Ее имя происходит от английских слов str ing len gth (длина строки).

#include <stdio.h>

#include <string.h>

Main()

{

int len;

char s[] = "Prodigy";

len = strlen(s);

printf ("Длинастроки %s равна %d", s, len);

}

В этом примере функция определит, что длина строки равна 7. Теперь рассмотрим более сложную задачу.

Задача. В текстовом файле input.dat записаны строки текста. Вывести в файл output.dat

в столбик длины этих строк.

#include <stdio.h>

#include <string.h>

Main()

{

char s[80];

FILE *fin, *fout;

fin = fopen ("input.dat", "r");

fout = fopen ("output.dat", "w");

while (NULL!= fgets(s, 80, fin)) // читаемстроку s

{

fprintf(fout, "%d\n", strlen(s)); // выводим ее длину в файл

}

fclose (fin);

fclose (fout);

}

Несмотря на то, что с первого взгляда программа написана верно, числа в файле будут на единицу больше, чем длины строк (кроме последней строки). Вспомнив предыдущий материал,объясните это. Далее будет показано, как получить точный результат.

Сравнение строк – strcmp

Для сравнения двух строк используют функцию strcmp (от английских слов str ing c o mp arison– сравнение строк). Функция возвращает ноль, если строки равны (то есть «разность»между ними равна нулю) и ненулевое значение, если строки различны. Сравнение происходитпо кодам символов, поэтому функция различает строчные и заглавные буквы – они имеют разныекоды.

#include <stdio.h>

#include <string.h>

Main()

{

char s1[] = "Вася",

s2[] = "Петя";

if (0 == strcmp(s1,s2))

printf("Строки %s и %s одинаковы", s1, s2);

else printf("Строки %s и %s разные", s1, s2);

}

Если строки не равны, функция возвращает «разность» между первой и второй строкой, то есть разность кодов первых различных символов. Эти числа можно использовать для сортировки строк – если «разность» отрицательна, значит первая строка «меньше» второй, то есть стоит за ней в алфавитном порядке. В таблице показано несколько примеров (код буквы 'A' равен 65,

код буквы 'B'66, код буквы 'C'67).

Задача. Ввести две строки и вывести их в алфавитном порядке.

#include <stdio.h>

#include <string.h>

Main()

{

char s1[80], s2[80];

printf ("Введитепервуюстроку");

gets(s1);

printf ("Введите вторую строку");

gets(s2);

if (strcmp(s1,s2) <= 0)

printf("%s\n%s", s1, s2);

else printf("%s\n%s", s2, s1);

}

Иногда надо сравнить не всю строку, а только первые несколько символов. Для этого служит функция strncmp (с буквой n в середине). Третий параметр этой функции – количество сравниваемых символов. Принцип работы такой же – она возвращает нуль, если заданное количество первых символов обеих строк одинаково.

#include <stdio.h>

#include <string.h>

Main()

{

char s1[80], s2[80];

printf ("Введитепервуюстроку");

gets(s1);

printf ("Введите вторую строку");

gets(s2);

if (0 == strncmp(s1, s2, 2))

printf("Первыедвасимвола %s и %s одинаковы", s1, s2);

Else

printf("Первые два символа %s и %s разные", s1, s2);

}

Один из примеров использования функции strcmp – проверка пароля. Составим про-

грамму, которая спрашивает пароль и, если пароль введен неверно, заканчивает работу, а если верно – выполняет какую-нибудь задачу.

Пример. Составить программу, которая определяет, сколько цифр в символьной строке. Программа должна работать только при вводе пароля «куку».

#include<stdio.h>

#include<string.h>

Main()

{

char pass[] = "куку", // правильный пароль

s[80]; // вспомогательная строка

int i, count = 0;

printf ("Введитепароль ");

gets(s);

if (strcmp (pass, s)!= 0)

{

printf ("Неверный пароль");


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: