К счастью, язык Си расценивает строки как особую разновидность массивов, позволяя осуществлять ввод и вывод строк как единого целого. Однако какие-либо дополнительные приемы обращения со строками в языке Си отсутствуют. В то же время, использование строк настолько распространено в программировании, что большинство Си и Си++ компиляторов имеют специальные функции для работы со строками. Конечно, для этих целей можно написать и собственные функции, но использование стандартных библиотек представляется более эффективным.
В качестве примера мы обсудим несколько функций работы со строками и посмотрим, какие инструкции следует написать, чтобы выполнить те же действия без использования библиотечных функций.
Сравнение двух строк
В Си и Си++ нельзя непосредственно сравнить значение двух строк с помощью, например, такого условия:
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("Строки совпадают"); }