Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебник Моя первая программа на С++.docx
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
6 Мб
Скачать
☆

Сравнение двух строк

В Си и Си++ нельзя непосредственно сравнить значение двух строк с помощью, например, такого усло- вия:

if (string1 == string2)

Рис. 10.8. Синтаксис функции strcmp()

Однако большинство библиотек содержит функцию strcmp(), которая возвращает нулевое значение в том случае, если строки одинаковы, либо значение, отличное от нуля, если строки не совпадают. Синтаксис функции strcmp() показан на рис.10.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(), с которой позволяют работать большинство компилято- ров. Синтаксис функции следующий:

¶a++ae æepcue u+uru æɵuyye+a sneuwpo++ɵu usgawenacwæou "Books-shop".

Pacupocwpa+e+ue, upogaua, uepesauuca ga++on u+uru unu ee ¬acwen 3AMPE[EHª.

O æcex +apyue+uex upoca6a coo6yawa uo agpecy piracy@books-shop.com

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);

}

В этой программе происходит присваивание символьных значений одного массива соответствующим эле- ментам другого массива.

Рис. 10.9. Синтаксис функции strcat()