Символьный тип данных char. ASCII-коды символов. Строки
Краткие теоретические сведения. В языке C есть тип char для символов. Каждому символу сопоставлено число от 0 до 255, которое называется ASCII-кодом символа.
Например, символу 'A' соответствует число 65. Символами можно оперировать, как числами и, наоборот, переменные типа int можно интепретировать как символы (сравнивать с символами или печатать как символы).
Приведем таблицу ASCII-кодов символов:
Для считывания одного символа существует функция getchar из библиотеки stdio.h.
Логика приведенной ниже программы следующая. Считывается символ и печатается в двух форматах: как символ (формат "%c") и как число (формат "%d"). Это делается до тех пор, пока символ (а точнее его ASCII код) не будет равен 27, то есть пока не будет нажата клавиша ESC.
Перед выполнением индивидуального задания выполните в среде MS Visual C++ следующий пример:
#include "iostream.h"
#include "stdio.h"
#include <conio.h>
int main(int argc, char* argv[])
{
char * str = "|--------------------------------------|\n"
"| |\n"
"| Task 7 (Example) |\n"
"| |\n"
"|--------------------------------------|\n";
printf("\n");
printf("%s", str);
int ch=34;
do {
printf ("/> ");
ch = getch();
printf ("\nYou have pressed %c. ASCII code = %d\n", ch, ch);
} while (ch != 27);
system("PAUSE");
return 0;
}
Используйте потоковый вывод:
#include "stdio.h"
#include <conio.h>
#include "iostream.h"
using namespace std;
int main(int argc, char* argv[])
{
char * str = "|--------------------------------------|\n"
"| |\n"
"| Task 7 (Example) |\n"
"| |\n"
"|--------------------------------------|\n";
cout <<"\n";
cout << str;
int ch=34;
do {
cout << "/> ";
ch = getch();
cout << "\nYou have pressed " << (char)ch << ". ASCII code = " << ch << "\n";
} while (ch != 27);
system("PAUSE");
return 0;
}
После набора исходного кода откомпилируйте программу, запустите ее на выполнение. Окно консольного приложения после ввода запрашиваемых данных выглядит следующим образом:
После завершения работы с программой переходите к выполнению
индивидуального задания.
Задание 5.1. При выполнении индивидуальных заданий рекомендуется пользоваться таблицей ASCII кодов символов.
Варианты индивидуальных заданий
5.1.1. Написать программу, которая выводит символы с четными ASCII кодами.
5.1.2. Написать программу, которая выводит символы с нечетными ASCII кодами.
5.1.3. Написать программу, которая запрашивает символ, затем выводит его код и сам символ. После вывода задается вопрос: Продолжить? Если пользователь нажимает ‘Y’ или ‘y’, то программа продолжает запрашивать ввод символов.
5.1.4. Написать программу, которая выводит только русские буквы по их ASCII кодам.
5.1.5. Написать программу, которая выводит только прописные латинские буквы по их ASCII кодам.
5.1.6. Написать программу, которая выводит только спецсимволы по их ASCII кодам.
5.1.7. Написать программу, которая считывает в цикле символ с клавиатуры и выводит сообщение о том, какой символ считан: заглавный или прописной.
5.1.8. Написать программу, которая выводит все символы по их ASCII кодам.
5.1.9. Написать программу, которая формирует на экране таблицу символов, похожую на таблицу, приведенную в примере.
5.1.10. Написать программу, которая в цикле запрашивает ввод символа, затем, если введен символ с четным кодом – программа завершается, если с нечетным кодом – продолжает свою работу.
Строки. Одномерный символьный массив – это строка. Константы строки
должны заканчиваться символом ‘\0’. То есть строка в С – это массив символов с
символом ‘\0’ в конце. При инициализации символьного массива с помощью строки в двойных кавычках в конце строки компилятор сам ставит символ ‘\0’.
Например, строковой переменной answer можно присвоить значение
"Welcome " следующими способами:
char answer [] = { 'W ', 'e ', 'l ', 'c ', 'o ', 'm ', 'e ', '\0 '};
или
char answer[] = "Welcome";
или
char answer [8] = "Welcome";
или
char * answer = "Welcome";
В языке С разрешены символьные константы, в которых размещаются
управляющие символы:
\ - размещение текста этой константы и на следующей строке,
\n - переход на следующую строку при ее выводе,
\07 - короткий звонок,
Задание 5.2.Составить и выполнить программу по обработке символьных данных. Текст вводится с клавиатуры в символьную переменную. Исходный текст и результаты распечатать.
5.2.1. Вывести на печать список слов, имеющих одинаковую приставку (несколько букв, задаваемых с клавиатуры).
5.2.2. Раздвинуть заданный текст, вставив введенную с клавиатуры последовательность символов после 1-го символа каждого слова.
5.2.3. В заданном тексте слова разделены запятыми. Напечатать список слов, начинающихся с символа, введенного с клавиатуры.
5.2.4. Определить наличие слов в заданном тексте, содержащих сочетание символов, задаваемое с экрана.
5.2.5. Из заданной последовательности слов удалить слова, содержащие числа.
5.2.6. Каждое слово текста преобразовать таким образом, чтобы оно читалось справа налево.
5.2.7. Подсчитать количество слов, разделенных в списке запятыми, содержащих k гласных букв (k задается с клавиатуры).
5.2.8. Из введенного текста сначала распечатать слова, заканчивающиеся на согласную букву, а потом – на гласную букву.
5.2.9. В заданном тексте подсчитать количество экземпляров каждой буквы, входящей в текст.
5.2.10. В заданном тексте подсчитать количество гласных, согласных букв, цифр и т.д.
Контрольные вопросы
1. Что такое массив?
2. Как происходит обращение к элементам массива?
3. Как объявляется массив?
4. Что такое строковый тип и как объявляется переменная данного типа?
5. Чем строковый тип отличается от символьного?
6. Для чего в языке С введен тип char?
7. Как соотносятся тип int и тип char?
8. Какая строка формата используется для вывода переменной типа char?
9. Какую строку формата необходимо использовать, чтобы вывести не сам символ, а его код?