Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
71
Добавлен:
26.05.2014
Размер:
8.82 Кб
Скачать

Документация по Cи, C++ и Visual C++Обработка символьных данных

                                    Стр. 8               < оглавление >

       Язык Си лучше всего подходит для системной работы: написания компиляторов, интерпретаторов, опрерационных систем, редакторов текста и.т.п. В стнадартной библиотеке Си предусмотренымногие полезные функции, выполняющие простые действия с символьными данными. Рассмотрим из них - 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);

}

 < Назад >          < Дальше >

Соседние файлы в папке Bookc