Большой архив статей, книг, документации по программированию, вебдизайну, компьютерной графике, сетям, операционным системам и многому другому
 
<Добавить в Избранное>    <Сделать стартовой>    <Реклама на сайте>    <Контакты>
  Главная Документация Программы Обои   Экспорт RSS E-Books
 
 

   Программирование -> C / C++ -> Книга по Си


Обработка символьных данных

       Язык Си лучше всего подходит для системной работы: написания компиляторов, интерпретаторов, опрерационных систем, редакторов текста и.т.п. В стнадартной библиотеке Си предусмотренымногие полезные функции, выполняющие простые действия с символьными данными. Рассмотрим из них - putchar и getchar выполняющие ввод и вывод символа соответственно и создадим на их основе ряд своих полезных функций.

     Функция getchar за одно обращение к ней выдает в качестве результата один символ, поступивший с системного ввода. Мы можем рассматривать getchar как функцию, имеющую заголовок

              int getchar()

видите, у нее совсем нет аргументов и она возращает значение типа - это значение символа во внутреннем представлении его для данной ЭВМ(напрмер в ACSII). Таким образом после обращения

               c = getchar()

  переменная с содержит очередной символ, набранный вами на клавиатуре.

     Функция putchar за одно обращение к ней выдает один символ в стандарный выходной поток. Вызов этой функции имеет вид:

               putchar(c);

c- переменная символьного типа, котрой предварительно было присвоено некоторое значение. Рассмотрим примеры. Программа (пример 2.7) вывводит на экран все прописные латинские буквы. Мы уже напоминали что типы char и int взаимозаменяемы. Последовательное прибавление к очередному значению с обеспечивает выбор очередной буквы ввиду их лексической упорядоченности. 

              Пример 2.7

#include <stdio.h>
main()
{
char c;
c='A'
while(c<='Z')
{
putchar(c);
       c=c+1;
}
}

Прежде, чем перейти к рассмотрению примеров, обсудим, как машина должна определять конец входного потока символов, вводимых с клавиатуры терминала. Можно, конечно, выбрать некоторый символ как признак конца потока, но нужна гарантия, что он нигде не повторится. В использованной нами операционной системе для получения такого символа надо нажать CTRL+Z. В программе значение этого символа мы будем использовать через символическое имя EOF(end of file). Теперь мы можем написать программы копирования файла(прмер 2.8) . Пока не обнаружен конец входного потока, ЭВМ получает с клавиатуры символ (это делает функция getchar) и сразу же выодит его на экран дисплея с помощью функции putchar. Для завершения программы достаточно нажать CTRL+Z.

     Пример 2.8

/*ЭХО ПРОГРАММА*/
#include <stdio.h>
main()
{
char c;
c=getchar();
while(c!=EOF)
{
putchar(c);
c=getchar();
}
}

   Программу копирования можно написать и более компактно. В языке Си любое присваивание например, c=getchar(), можно использовать в любом выражении в качестве операнда; его значение - это просто значение, присваиваемое левой части. Учитывая сказанное, перепишем Эхо Программу (Пример 2.9) . Это компактная, элегантная программа принимает символ с клавиатуры и присваивает его переменной с, а затем сравнивает его с признаком конца файла. Пока этот признак не обнаружен, выполняется тело цикла и символ выдается на экран. В противном случае цикл, а вместе с ним и вся программа завершаются.

       Пример 2.9

*ЭХО ПРОГРАММА ВАР2.*/
#include stdio.h
main()
{
  char c;     while((c=getchar())!=EOF)putchar(c);
}

    Отметим, что включение присваиваний в проверки - силбное единство языка, способствующее созданию программ. Учтите, что скобки вокруг присваивания внутри условия необходимы: приоритет операции != выше приоритета операции присваивания. 
      Следующяя программа (пример 3.0) подсчитывает количество строк, слов и символов во введенном с клавиатуры тексте. Слово - любая последовательность символов, не содержащяя знаков табуляции ("\t"), пробелов и символов "\n". Будем предполагать также, что любая строка, в том числе и последняя, завершается символом перехода на новую строку "\n".   Обратите внимание на строку line= word=kc=0; в которой трем переменным приваивается значение нуля. Выражения, связанные логическими операциями &&(И) и || (ИЛИ) вычисляются слева на право. Как только истинность или ложность  станет известной, дальнейшие вычисления прекращяются  Таким образом в строке     if(s==' ' || s=='\n' || s=='\t')  
символ  s содержит пробел, то остальные две проверки уже не делаются. Отсюда следует выжный для практики вывод: первыми надо проверять наиболее часто встречающиеся символы.

  Пример 3.0

/*подсчет строк, символов, слов*/
#include <stdio.h>
main()
{
  int c,line,word,kx,inword=0;
  line=word=kc=0;
  while((c=getchar())!=EOF)
{
kc=kc+1;
       if(c=='\n') line=line+1;
       if(c=='' || c=='\n' || c=='\t') inword=0;
         else
              if(!inword)
                 {
inword=1;
word=word+1;
}
      }
printf("\n");
printf("строк - %d\n",line);
printf("символов - %d\n",kc);
}

< Дальше >

 

 
Интересное в сети
 
10 новых программ
CodeLobster PHP Edition 3.7.2
WinToFlash 0.7.0008
Free Video to Flash Converter 4.7.24
Total Commander v7.55
aTunes 2.0.1
Process Explorer v12.04
Backup42 v3.0
Predator 2.0.1
FastStone Image Viewer 4.1
Process Lasso 3.70.4
FastStone Image Viewer 4.0
Xion Audio Player 1.0.125
Notepad GNU v.2.2.8.7.7
K-Lite Codec Pack 5.3.0 Full


Наши сервисы
Рассылка новостей. Подпишитесь на рассылку сейчас и вы всегда будете в курсе последних событий в мире информационных технологий.
Новостные информеры. Поставьте наши информеры к себе и у вас на сайте появится дополнительный постоянно обновляемый раздел.
Добавление статей. Если вы являетесь автором статьи или обзора на тему ИТ присылайте материал нам, мы с удовольствием опубликуем его у себя на сайте.
Реклама на сайте. Размещая рекламу у нас, вы получите новых посетителей, которые могут стать вашими клиентами.
 
Это интересно
 

Copyright © CompDoc.Ru
При цитировании и перепечатке ссылка на www.compdoc.ru обязательна. Карта сайта.
 
Rambler's Top100