- •Лабораторная работа №8 массивы и строки
- •Массивы
- •Определение массива
- •Ввод значений в массив
- •Работа с массивами
- •Просмотр массива
- •Поиск в массиве
- •Передача массива функции
- •Использование массивов
- •Сравнение двух строк
- •Определение длины строки
- •Присваивание строк
- •Слияние строк
- •Массивы строк
- •Проектирование программы
Сравнение двух строк
В Си и Си++ нельзя непосредственно сравнить значение двух строк с помощью, например, такого условия:
if (string1 == string2)
Рис. 8. Синтаксисфункцииstrcmp()
Однако большинство библиотек содержит функцию strcmp(), которая возвращает нулевое значение в том случае, если строки одинаковы, либо значение, отличное от нуля, если строки не совпадают. Синтаксис функции strcmp() показан на рис. 8. Эта функция используется в программе следующим образом:
if (strcmp(name1, name2) == 0)
puts("Имена совпадают");
else
puts("Имена не совпадают");
Некоторые компиляторы возвращают отрицательное число, если первая строка оказывается с точки зрения алфавита «меньше» второй, и положительное число, если «больше».
Если компилятор не имеет функции strcmp(), можно написать собственную функцию, которая сравнивала бы две сроки элемент за элементом как параллельные массивы, и останавливалась при обнаружении пары несовпадающих значений:
main()
{
int index, flag;
char name[10], name1[10];
gets(name);
gets(name1);
flag = 0;
for (index = 0; index < 10; index++)
if (name[index] != name1[index])
{
flag = 1;
break;
}
if (flag == 1)
puts("Строкинесовпадают");
else
puts("Строки совпадают");
}
Определение длины строки
Длина строки не обязательно должна совпадать с длиной массива. Например, вы можете определить массив name, который содержит 20элементов, но ввести в него имя, состоящее из меньшего числа символов. Большинство компиляторов Си и Си++ имеют функцию strlen(), которая позволяет определить количество символов, действительно содержащееся в строке:
gets(name);
count = strlen(name);
printf("Строка %sсодержит %dсимволов", name, count);
Функция присваивает значение, отражающее количество символов во введенной строке (в нашем случае она называется name), целочисленной переменной count. Без использования функции strlen() ту же процедуру можно выполнить с помощью следующих инструкций:
main()
{
int index;
char name[10];
gets(name);
for (index = 0; index < 10; index++)
{
if (name[index] == '\0')
break;
}
printf("%d", index);
}
В данной программе осуществляется просмотр массива в поисках нулевого символа. Дело в том, что позиция элемента, содержащего нулевой символ, соответствует количеству символов в строке, то есть ее длине.
В качестве примера того, как можно использовать функцию определения длины строки, ниже приведена программа, отображающая строку в обратном порядке:
main()
{
char name[10];
int index, count;
gets(name);
count = strlen(name);
for (index = count; index > 0; index--)
putchar(name[index-1]);
putchar('\n');
}
Здесь значение длины строки используется в качестве индекса в условии цикла for, причем значение его уменьшается при каждом повторе цикла. Если строка содержит 5символов, цикл будет повторен 5раз, изменяя значение переменной index от 5 до 1. Так как элементы такого массива имеют номера от 0 до 4, то, чтобы получить номер элемента, из значения переменной index вычитается единица.
Присваивание строк
Язык Си не позволяет непосредственно присваивать символы строке, используя инструкции вроде
name = "Сэм";
Для этой цели можно вызвать функцию strcpy(), с которой позволяют работать большинство компиляторов. Синтаксис функции следующий:
strcpy(name, "Сэм");
strcpy(name, name1);
В первом примере символы "Сэм" присваиваются строковой переменной с именем name. Во втором примере символы, которые уже были присвоены переменной name1, копируются в переменную name.
Для того чтобы выполнить эти же действия с помощью собственных инструкций, вам придется последовательно присваивать символьные значения каждому элементу массива:
char name[] = "Алан";
main()
{
char person[10];
int count, index;
count = strlen(name);
for (index = 0; index <= count; index++)
person[index] = name[index];
puts(person);
}
В этой программе происходит присваивание символьных значений одного массива соответствующим элементам другого массива.
Рис. 9. Синтаксис функции strcat()
|