Для начала давайте разработаем и составим п 11411p156l рограмму печати каждой строки ввода, которая содержит определенную комбинацию символов (это - специальный случай утилиты Grep системы Unix). Например, при поиске комбинации the
Now is the time
for all good
men to come to the aid
of their party
Now is the time
men to come to the aid
of their party
while (имеется еще строка)
if (строка содержит нужную комбинацию)
... // Вывод этой строки
getline printf, которую уже кто-то подготовил для нас. Это значит, что нам осталось только написать процедуру для определения, содержит ли строка данную комбинацию символов или нет. Мы можем решить эту проблему, позаимствовав разработку из PL/1: функция index(s,t) индекс, строки s t s t . В качестве начальной позиции мы используем 0, а не 1, потому что в языке «C» массивы начинаются с позиции нуль. Когда нам в дальнейшем понадобится проверять на совпадение более сложные конструкции, нам придется заменить только функцию index
index Программа также содержит новый вариант функции getline
#define maxline 1000
main() /* find all lines matching a pattern */
// Поместить строку в s и возвратить длину
int getline(char s[],int lim)
// Вернуть индекс t в s, или -1 в противном случае
int index(char s[], char t)
return
}
dummy()
return return
return (выражение)
return может не быть вообще никакого выражения; в этом случае в вызывающую программу не передается никакого значения. Управление также возвращется в вызывающую программу без передачи какого-либо значения и в том случае, когда при выполнении мы «проваливаемся» на конец функции, достигая закрывающейся правой фигурной скобки. Eсли функция возвращает значение из одного места и не возвращает никакого значения из другого места, это не является незаконным, но может быть признаком каких-то неприятностей. В любом случае «значением» функции, которая не возвращает значения, несомненно, будет мусор. Отладочная программа Lint проверяет такие ошибки.
Механика компиляции и загрузки «C»-программ, расположенных в нескольких исходных файлах, меняется от системы к системе.
1. В системе Unix, например, эту работу выполняет команда cc main.с getline.c index.с
cc main.c getline.c index.c
main.o getline.o index.o a.out
main.c
cc main.c getline.o index.o
cc и
2. В системe Windous XP при использовании оболочки Visual Studio и среды программирования Visual C++ используется прогрессивный «проектный» подход: в состав «рабочего пространства проекта» - Workspace в число исходных файлов - Source Files (см. рис. 1.1) нужно включить только исходные модули с суффиксами «.сpp» main.сpp getline.cpp index.сpp. Решение о том, что нужно перекомпилировать, а что не нужно, - принимает оболочка Visual Studio, причем без дополнительного набора каких-либо команд, как этого, например, требует Unix.
rindex(s,t) t s s t
|