|
Программирование >> Процедурные приложения
char sztest array[iSIZE]; fputs( Введите первую строку : , stdout); gets(sztest afray); fputs( Выввели : , stdout); puts(sztest array) ; fputs( Введите вторую строку : , stdout); fgets(sztest array, iSIZE, stdin); fputs( Выввели : , stdout); fputs(sztest array, stdout); . sprintf(sztest array, Это была %s проверка , только ); fputs( Функция sprintf() создала : , stdout); fputs(sztest array, stdout); return(0); } Вот что будет выведено на экран в результате работы программы: Введите первую строку Вы ввели Введите вторую строку Вы ввели строка один строка один строка два строка два Функция sprintf() создала : Это была только проверка Если введенные строки содержат меньше символов, чем зарезервировано ячеек в массиве sztest array, программа работает правильно. Тем не менее, если ввести строки большей длины, чем позволяет размер массива sztest array, на экране может появиться абракадабра. Функция gets() принимает символы от стандартного устройства ввода (в большинстве случаев это клавиатура) и помещает их в массив, указанный в качестве аргумента. Когда вы нажимаете клавишу [Enter] для завершения ввода, генерируется символ новой строки (\n). Функция gets() преобразует его в нулевой символ (\0), который служит признаком конца строки. Учтите, что при использовании функции gets() нет возможности напрямую определить, превышает ли количество введенных символов размер массива. Функция puts() выводит на экран то, что было получено с помощью функции gets(). Она выполняет обратную замену - нулевого символа на символ новой строки. Функция fgets()аналогична функции gets(), но позволяет контролировать соответствие числа введенных символов установленным размерам массива. Символы читаются из указанного потока, которым может быть файл или, как в данном случае, стандартное устройство ввода (stdin). Введенных символов должно быть на единицу меньше, чем размер массива: в последнюю позицию автоматически добавляется нулевой символ. Если был введен символ новой строки, то он сохранится в массиве непосредственно перед символом \ 0. По аналогии с работающими в паре функциями gets() и puts(), совместно с функцией fgets() используют функцию fputs(). Поскольку первая не удаляет символы новой строки, то и вторая не добавляет их. Функция fputs() направляет символы в указанный поток: файл или устройство стандартного вывода stdout(как правило, это консоль). Имя функции sprintf() является сокращением от слов string printf() , т.е. строковая функция printf() . В этой функции используются те же спецификаторы форматирования, что и в printf().Основное отличие состоит в том, что функция sprintf() помещает результат не на экран, а в указанный массив символов. Это может быть полезно, если результат работы данной функции необходимо вывести несколько раз, скажем, на экран и на принтер. Функции strcpy( ), strcat( ), strncmp( ) и strlen( ) Все функции, рассматриваемые в этом параграфе, объявлены в файле STRING.H. Для их работы требуется, чтобы передаваемые им наборы символов обязательно заканчивались признаком конца строки - символом \0. В следующей программе демонстрируется использование функции strcpy() : * strcpy. с * Эта программа на языке С демонстрирует использование функции strcpy(). #include <stdio.h> #include <string.h> #define iSIZE 20 main() { char szsource string[iSIZE]= Исходная строка , szdestination string[iSIZE]; strcpy(szdestination string, Постоянная строка ); printf( %s\n ,szdestination string); strcpy(szdestination string, szsource string); printf( %s\n ,szdestination string); return (0); При первом вызове функций strcpy() происходит копирование константной строки Постоянная строка в массив szdestination string, а вторая функция strcpy() копирует туда же массив szsource string, содержащий строку Исходная строка . В результате получаем следующие сообщения: Постоянная строка Исходная строка Ниже показана аналогичная программа на языке C++: strcpy. срр Это версия пред1дущей программ:, написанная на языке C++. #include <iostream.h> #include <string.h> #define iSIZE 20 main () { char szsource string [iSIZE] = Исходная строка , szdestination string [iSIZE] ; strcpy (szdestination string, Постоянная строка ); cout << \n << szdestination string; strcpy(szdestination string, szsource string) ; cout << \n << szdestination string; return(0); } Функция strcatf() конкатенирует (объединяет) две самостоятельные строки в один массив. Обе строки должны заканчиваться нулевыми символами. Результирующий массив также завершается символом \0. Применение функции strcat() иллюстрируется следующей программой: * strcat.c * Эта программа на языке С демонстрирует использование функции strcat() . */ #include <stdio.h> #include <string.h> #define 1STRING SIZE 35 main() char szgreeting[]= Доброе утро, , szname[] = Каролина! , szmessage[iSTRING SIZE] ; strcpy (szmessage, szgreeting) ; strcat (szmessage, szname) ; strcat (szmessage, Какдела? ) ; printf ( %s\n ,szmessage); return(0); } В этом примере два массива, szgreetingи szname, инициализируются в момент объявления, тогда как массив szmessage создается пустым. Первое, что делает программа, это копирует с помощью функции strcpyt() содержимое массива szgreetingв массив szmessage. Затем функция strcat() добавляет в конец массива szmessage( Доброе утро, ) содержимое массива szname( Каролина! ). И наконец, последняя функция strcat() добавляет к полученной строке Доброе утро, Каролина! текст Как дела? . В результате программа выведет на экран Доброе утро, Каролина! Как дела? Следующая программа демонстрирует возможность сравнения двух строк с помощью функции strncmp(): * stncmp.c * Эта программа на языке С сравнивает две строки с помощью функции strncmp() . #include <stdio.h> #include <string.h> main () { char szstringA[] = Вита , szstringB[]= Вика ; int istringA length, iresult = 0; istringA length = strlen(szstringA); if(strlen(szstringB) >= strlen(szstringA)) iresult = strncmp(szstringA, szstringB, istringA length); printf ( Строка %s обнаружена iresult == 0 ? была : не была ); return(0); } Используемая в программе функция strlen() возвращает число символов в строке, указанной в качестве аргумента, не считая последнего, нулевого символа. В программе эта функция вызывается дважды с разными целями, что дает возможность получить о ней более полное представление. В первом случае функция записывает в переменную istringA length длину массива szstringA. Во втором случае значения, возвращаемые двумя функциями strlen(), сравниваются с помощью оператора >=. Если длина массива szstringB больше или равна длине массива szstringA, то происходит вызов функции strncmp(). Функция strncmp() ищет первую строку во второй, начиная с первого символа. Длина первой строки задается в третьем аргументе. Если строки одинаковы, функция возвращает нулевое значение. Когда строки не идентичны, функция возвращает отрицательное значение, если строка szstringA меньше строки szstringB, и положительное значение, если строка szstringA больше строки szstringB. Результат сравнения заносится в переменную iresult, на основе которой с помощью условного оператора (?:) формируется строка отчета. В нашем примере программа выведет на экран следующее сообщение: Строка не была обнаружена В завершение главы подчеркнем, что двумя наиболее частыми причинами сбоев в работе программ являются выход за пределы массива и отсутствие нулевого символа (\0) в конце символьного массива, используемого в качестве строки. Обе эти ошибки могут никак не проявляться в течение многих месяцев, до тех пор пока пользователь не введет, к примеру, слишком длинную строку текста.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |