Меню сайта
Наш опрос
Оцените мой сайт
Всего ответов: 5
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Главная » 2014 » Июль » 22 » Урок 15. Некоторые стандартные функции работы со строками.
16:03
Урок 15. Некоторые стандартные функции работы со строками.
Normal 0 false false false RU X-NONE X-NONE MicrosoftInternetExplorer4 Всем доброго дня. Продолжаем изучать строки. Сегодня у нас праздник. Почему? Да просто мы познакомимся с новым заголовочным файлом – string.h. Нетрудно сообразить, что в нём описываются стандартные функции, предназначенные для работы со строками.  Естественно не следует забывать, что для использования этих функций необходимо подключить этот заголовочный файл. Я надеюсь вы не забыли как это делается.Функция strlen().В практическом задании к прошлому занятию, я просил вас написать  программу, которая вычисляет длину строки без учета нулевого элемента.  Длина строки - это один из самых важных параметров, характеризующих любую строку, и необходимый при работе со строками.  Для определения длины строки в заголовочном файле string.h описана функция strlen().Данная функция имеет простой синтаксис. Она принимает один параметр строку символов, и возвращает в результате своей работы целое число - длину этой строки. Листинг15.1#include <stdio.h> #include <string.h> int main(void) {       char ;       int Dlina stroki %d simvolov\n",n); return(0);}Рис.1 Программа, иллюстрирующая работу функции strlen().Как видите ничего неожиданного, функция вернула в результате своей работы число 11. Теперь, на основании знаний, полученных на прошлом занятии, объясните результат работы следующей программы.Листинг15.2#include <stdio.h> #include <string.h> int main(void) {       char str[100];       fgets(str,100,stdin);       int Dlina stroki %d simvolov\n",n);return(0); } Рис.2. Иллюстрация работы программы Листинг 15.2Почему, когда мы ввели Hello world и нажали Enter, наша функция вернула нам число 12, а не 11 как в прошлом случае?Функции сравнения строк.Еще одной задачей, предложенной для решения в прошлом занятии, было написание программы, которая посимвольно сравнивает между собой две строки.  Для выполнения этой операции, тоже существует готовая функция –strcmp().Данная функция принимает в качестве аргументов две строки, которые необходимо сравнить. В результате своей работы, если строки одинаковые, он возвращает нуль, и если разные, то либо целое число положительное или отрицательное. Сравнение идет по коду символов в таблице ASCII. Рассмотрим пример.Листинг15.3#include <stdio.h> #include <string.h> int main(void) {        char  str1[] = "hello world",             str2[] = "hello world",              str3[] = "hello World";        int n12 = strcmp(str1,str2);        int n13 = strcmp(str1,str3);        int n31 = strcmp(str3,str1);        printf(" %s i %s %d\n", str1, str2,n12);        printf(" %s i %s %d\n", str1, str3,n13);        printf(" %s i %s %d\n", str3, str1,n31);        printf("%c/%d\n",str1[6],str1[6]);        printf("%c/%d\n",str3[6],str3[6]);return(0); } Результат работы данной программы:Рис.3. Сравнение строк функцией strcmp()  Строки str1 и str2 одинаковые и потому, при их сравнении получилось 0. А вот строки str1 и str3 различаются, регистром символа ‘w’ поэтому результат их сравнения не равен нулю. Обратите внимание, что в одном случае он равен единице, а в другом минус единице. Почему так получается, мы сейчас разберемся.Строки сравниваются посимвольно, использую соответствие между символом и его кодом в таблице ASCII.  Ниже сравнения, в нашей программе указаны коды символов ‘w’ и ‘W’.  Как видите, код символа ‘w’ –  119, больше чем код символа ‘W’ – 87. Значит и строка str1 больше чем строка str3. Основное правило:  Если, в функции strcmp() строка записанная в первом аргументе, больше чем строка во втором аргументе, то функция возвращает положительное число.  Если меньше – отрицательное. Есть и еще одна функция, предназначенная для сравнения строк strncmp(). Её отличие лишь в том, что добавляется третий параметр – целое число, указывающее, сколько символов с начала строки необходимо сравнить. Немного преобразуем предыдущую программуЛистинг 15.4#include <stdio.h> #include <string.h> int main(void) {        char  str1[] = "hello world",              str2[] = "hello World";        int n1 = strncmp(str1,str2,6);        int n2 = strncmp(str1,str2,7);        printf("%s i %s %d\n", str1, str2,n1);        printf("%s i %s %d\n", str1, str2,n2);return(0);}Рис.4. Сравнение частей строк, с помощью функции strncmp().Как видите, когда мы сравнили первые шесть символов двух строк, то получили 0, так как они совпадают. Если же мы сравниваем первые семь символов, то первая строка больше второй, и в ответе получается положительное целое число. Причем в данном случае, это разность между кодами соответствующих символов (119-87 = 32). Пользоваться этим обстоятельством нужно очень осторожно. Не факт, что в других средах разработки, эти функции реализованы точно таким же образом. Т.е. может быть, что где-то strcmp будет тоже возвращать  32, а не 1, как в нашем примере. А где-то возможно strncmp не будет возвращать 32. Как это реализовано в вашей среде программирования проверьте самостоятельно.   Функции изменения регистра строки.Как вы помните, в задаче к прошлому уроку требовалось написать функцию, которая переводит все символы строки в нижний регистр. Для этой задачи тоже есть готовая функция – strlwr().  Ко всему прочему имеется и функция, которая переводит все символы в верхний регистр – strupr().Данные функции принимают один параметр – строку, которую необходимо перевести в тот или иной регистр. Рассмотрим пример их использования.Листинг 15.5 #include <stdio.h> #include <string.h> int main(void) {       char str[] = "HeLLo WoRlD";       printf ("%s\n",str);       strlwr(str); //переводим строку в нижний регистр      printf ("%s\n",str);       strupr(str); //переводим строку в верхний регистр      printf ("%s\n",str);return(0);}Результат работы программыРис.5. Изменение регистра строки функциями strupr() и strlwr().Функции объединения строк.В файле string.h описаны две функции для объединения строк. Первая strcat() принимает две строки, и приписывает вторую в конец первой. Т.е. результат склеивания двух строк окажется в той, что записана в первом аргументе. Причем нулевой символ ‘\0’ добавляется автоматически в конец новой, получившейся строки.  Небольшой иллюстрирующий пример:Листинг15.6#include <stdio.h> #include <string.h> int main(void) {       char  str1[50] = "hello",             ;       strcat(str1," "); //приклеиваем к str1 пробел получаем                        //в str1 строку "hello "      strcat(str1,str2);//приклеиваем к str1 строку str2       printf("%s\n", str1); //выводим str1 return(0); } Рис.6. Склеивание двух строк функцией strcat().Вторая функция strncat() отличается от предыдущей, наличием еще одного аргумента, означающего, какое количество символов с начала второй строки следует приклеить к первой строке. Немного переделаем наш предыдущий пример.Листинг 15.7#include <stdio.h> #include <string.h> int main(void) {       char  str1[50] = "hello",             ;       strcat(str1," "); //приклеиваем к str1 пробел получаем                              //в str1 строку "hello "      strncat(str1,str2,3); //приклеиваем к str1 3 первых                                     //символа из str2       printf("%s\n", str1); //выводим str1 return(0);}Ну и соответственно результат её работы.Рис.7. Использование функции strncat().Ничего удивительного. Все работает именно так, как и ожидалось.При работе с этими двумя функциями стоит внимательно следить за тем, чтобы в строке, к которой мы приклеиваем, хватило места, иначе произойдет ошибка переполнения. С ней мы уже сталкивались с прошлом занятии. Вот попробуйте выполнить следующую программу. Листинг 15.8#include <stdio.h> #include <string.h> int main(void) {       char  str1[10] = "hello",             ;       strcat(str1,str2);       printf("%s\n", str1);       return(0);}Хотя программа и скомпилируется, но при выполнении возникнет ошибка. На этом сегодняшний урок мы закончим. Мы рассмотрели лишь некоторые функции, описанные в заголовочном файле string.h. Есть там еще несколько очень интересных и полезных функций, но о них мы поговорим чуть позже, когда познакомимся с указателями.  Отдельного практического задания к этому уроку не будет.  Проверьте с помощью стандартных функций программы, написанные к прошлому занятию. А 3,4 и 5 задачи перепишите с использованием стандартных функций.Если Вам понравился этот урок, расскажите о нем вашим друзьям. В этом  Вам могут помочь кнопки основных социальных сетей, расположенные ниже. Вам остается всего лишь кликнуть по любой из них. /* Style Definitions */ table.MsoNormalTable {mso-style-name:"Обычная таблица"; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-priority:99; mso-style-qformat:yes; mso-style-parent:""; mso-padding-alt:0cm 5.4pt 0cm 5.4pt; mso-para-margin-top:0cm; mso-para-margin-right:0cm; mso-para-margin-bottom:10.0pt; mso-para-margin-left:0cm; line-height:115%; mso-pagination:widow-orphan; font-size:11.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-fareast-font-family:"Times New Roman"; mso-fareast-theme-font:minor-fareast; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin;}
Просмотров: 190 | Добавил: admin | Рейтинг: 0.0/0
Всего комментариев: 0
avatar
Форма входа
Календарь
«  Июль 2014  »
ПнВтСрЧтПтСбВс
 123456
78910111213
14151617181920
21222324252627
28293031
Архив записей