Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на C / C++ / Нейбауэр А. Моя первая программа на С.doc
Скачиваний:
182
Добавлен:
02.05.2014
Размер:
3.75 Mб
Скачать

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

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

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

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

Замечания по Си++

Благодаря перегрузке язык Си++ допускает использование оператора + для сложения двух строк с помощью инструкции:

new_string = string1 + string2;