|
Программирование >> Элементы языков с и с++
- Листинг 4.4 13.срр : Defines the entry point for the console application. #include stdafx.h #include <stdio.h> for getchar(),putchar() #include <conio.h> for getchO #include <stdlib.h> for exitO #define eof -1 признак конца ввода (Ctrl+z) #define maxline 1000 размерность массивов (максимальная длина строк) #define from 2 /*константа для выделения подстроки (с этого символа будет начинаться выделение) */ #define howmany 3 /*константа для выделения подстроки (столько симво- лов будет выделено) */ -----substr (s,n,m)---------------------------------------- void substr(char v[],char s[],int n,int m) { п-й элемент находится в массиве на (п-1)-м месте int i,j; for(i=0,j=n-l; j<(n-l+m); i++,j++) v[i]=s[j]; v[i]=\0; ------------------------------------------------------------- int getiine(char s[],int lim) i int c,i; for(i=0; i<lim-l && (c=getchar()) != eof s& с != Sn; i++) s[i]=c; s[i]=\0; i++; для учета количества return(i); ------------Копирование строки в строку--------------- void сору (char save [ ], char line [ ]) i int i=0; while((save[i]-line[i]) != SO) i++; -------------------------------------------------------- int tniair() { char s[maxline],v[maxline],w[maxline]; printf( Enter your stringSn ); int i=getline(s,maxline); copy(v,s); substr (w, V, from, howmany) ; if((i-l) < from) 1 printf( Length of the entered string is not enough for extraction from it ) ; getch(); exit(O); printf( Entered string = %s\n ,s); printf( Copied string .= %s\n ,v); printf( substring.....= %s\n ,w); getch(),- .f Смысл приведенной основной программы ясен из комментария к ней. Заметим только, что здесь встретилась новая библиотечная функция exit о, которая прерывает выполнение программы. Чтобы ее использовать, надо подключить файл stdlib.h. Так как строка символов может быть разной длины, то приходится проверять, достаточно ли в ней символов, чтобы выделить подстроку с указанием количества выделяемых символов и номера символа, с которого начнется выделение: if((i-l) < from) Напомним, что длину строки возвращает функция getiine о, а количество выделяемых символов мы задали с помощью оператора #def ine. В выражении if ((i-i) < from) мы записали i-i, чтобы длина проверялась без учета символа \о. Если длина введенной строки меньше номера символа, с которого надо выделять подстроку, то, естественно, надо об этом сообщить пользователю (что мы и делаем) и завершить программу. Это делает функция exit () (можно было бы добавить к программе блок возврата на повторный ввод новой строки, но у нас была другая задача: познакомиться с работой функций и новой функцией exit о). Результат работы основной программы приведен на рис. 4.2. ST C:\WINDOWS\system32\cmd.exe rnter youi* string . sdfl23qwer intered string = asdfl23qwer Copied string .= asdfl23cMer substring..... = sdf Я/Н1 продолжения нажиите любую клавишу Рис. 4.2. Результат работы программы листинга 4.4 Внешние и внутренние переменные Функции можно создавать и без параметров, если воспользоваться внешними переменными . Внешняя переменная- это переменная, значение которой известно во всех функциях, объявленных после нее, в том числе и в самой функции tmain(). Этот прием беспараметризации удобно применять тогда, когда в действительности у функции надо вводить столько параметров, что это затруднит ее понимание, или когда две функции обмениваются общими данными, не вызывая друг друга. Удобно это применять и тогда, когда в теле функции существуют массивы, требующие инициализации. Если массив, объявленный в теле функции, требует инициализации, то каждый раз при входе в функцию эта инициализация будет происходить, что продлит время выполнения программы. Лучше объявить такой массив вне функции, но так, чтобы он был известен в этой функции и один раз был проинициализирован (т. е. массив надо объявить как внешнюю переменную по отношению к данной функции).
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |