Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Поиск символов



Листинг 6.8 показывает, как использовать функцию strchr() для поиска отдельных символов в строке,

Листинг 6.8. ЕХТ1.С (проверка расширения файла, демонстрация №1)

1: #include <stdio.h>

2: #include <string.h>

3:

4: main()

5: {

6: char fileName[128];

7:

8: printf("Enter file name: ");

9: gets(fileName);

10: printf("As entered: %s\n", fileName);

11: if (strchr(fileName, '.’))

12: printf("File name is probably complete\n");

13: else

14: strcat(fileName, ".TXT");

15: printf(“Final file name: %s\n", fileName);

16: return 0;

17: }

_______________________________________________________

Скомпилируйте и запустите программу ЕХТ1, затем введите имя файла с расширением. Например, если вы введете test.txt, программа отобразит:

Enter file name: test.txt

As entered: test.txt

File name is probably complete

Final file name: test.txt

Но если вы введете test без расширения, программа присоединит к имени расширение.TXT, отобразив:

Enter file name: test

As entered: test

Final file name: test.TXT

Программа ЕХТ1 находит расширение в имени файла, выполняя поиск точки среди символов введенной строки. (В имени файла может быть только одна точка, которая должна предшествовать расширению, если оно имеется.) Ключевым в этой программе является оператор if...else (строки 11-14);

if (strchr(fileName, '.'))

printf("File name is probably complete\n");

else

strcat(fileName, ".TXT");

Выражение strchr(fileName, '.') возвращает указатель на символ точки в строке, адресуемой указателем fileName. Если такой символ не найден, функция strchr() возвращает нуль. Поскольку ненулевые значения означают "истину", вы можете использовать функцию strchr() в качестве возвращающей значение "исти­на"/"ложь". Вы также можете применить функцию strchr() для присваивания указателя на подстроку, начинающуюся с заданного символа. Например, если р - указатель, объявленный как char *, и указатель fileName из программы ЕХТ1 адресует строку TEST.TXT, то результат действия оператора р = strchr(fileName, '.'); показан на рис. 6.4.

Рис. 6.4 демонстрирует еще один важный момент, связанный с адресацией указателем не полной строки, а ее части - подстроки, Такими указателями следует поль­зоваться с большой осторожностью. На рисунке показана только одна строка, "TEST.TXT", оканчивающаяся нуле­вым байтом, но два указателя - fileName и р. Указатель fileName адресует полную строку. А указатель р адресует подстроку внутри того же набора символов. Строковые функции не заботятся о байтах, которые предшествуют их первому символу. Поэтому оператор

puts(p);

отображает подстроку ".TXT" так, будто она полная стро­ковая переменная, а не часть другой строки.

В программировании на С нет ничего необычного в использовании многих указателей, адресующих подстроки одной и той же полной строки. Но строка, показанная на рис. 6.4, расположена в куче, поэтому оператор

free(fileName);

корректно освобождает занимаемую строкой память. Однако программа никогда не должна выполнять опера­тор вида

free(p); /*??? */

Рис. 6.4. Функция strchr() находит символ в строке

пытаясь тем самым освободить подстроку, адресуемую указателем р, что, несомненно, приведет к разрушению кучи, вызвав ошибку, относящуюся к разряду трудно обнаруживаемых.

Функция strchr() отыскивает первое появление символа в строке. Объявления и операторы

char *p;

char s[] = "Abracadabra";

р = strchr(s,'a');

присваивают указателю р адрес первой строчной буквы 'а' в строке "Abracadabra".

Функция strchr() рассматривает завершающий нуль строки как значащий символ. Приняв во внимание этот факт, можно узнать адрес конца строки. Учитывая предыдущие объявления, оператор

р = strchr(s,0);

установит р равным адресу нулевого символа в строке s. Используйте этот простой метод, чтобы найти конец строки.

Чтобы найти последнее появление символа в строке, вызовите функцию strrchr(). Учитывая предыдущие объявления, оператор

р = strrchr(s,' b');

установит указатель р равным адресу подстроки "bra" в конце строки "Abracadabra".





Дата публикования: 2015-01-23; Прочитано: 228 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...