
- •Работа с символами и строками в языке программирования си
- •1. Общие понятия
- •1.1. Символьные переменные
- •1.2. Строковые переменные и константы
- •1.3. Операции ввода/вывода для строк
- •1.4. Строковые функции
- •2. Содержание и технология работы
- •Содержание отчета
- •Вопросы для самоконтроля
- •Время, отведенное на выполнение работы
- •Список литературы
- •Содержание
- •Работа с символами и строками в языке программирования си
2. Содержание и технология работы
Для решения задач необходимо запустить MS VS 2005 (Пуск - Microsoft Visual Studio 2005), создать новый проект.
В диалоговом окне Начальная страница (Start Page) нажать кнопку Create Project.
В появившемся диалоговом окне New Project в полях и областях задать параметры:
поле Name - имя создаваемого проекта;
поле Location - установить папку для размещения файлов проекта;
область Project Types - выбрать вариант Visual C++ Projects;
области Templates - выбрать вариант Win32 Console Application;
нажать кнопку ОК.
Ввести текст программы на языке программирования СИ.
Запустить программу нажатием кнопки Start или F5. Если в программном коде не обнаружено ошибок, будет получен результат.
Рассмотрим примеры задач работы со строками.
Задача 1. Ввод и вывод строк
Составим программу, которая запрашивает имя пользователя и здоровается с ним.
Текст программы будет выглядеть следующим образом:
Подключим библиотеки, в нашей программе их потребуется 3: stdafx.h, stdio.h, conio.h:
#include < stdafx.h
#include < stdio.h>
#include < conio.h>
Объявим главную функцию:
void main ()
{
Объявим две строки:
char name[15];//отведение в памяти компьютера места под строку с максимальной длиной 15 символов
char fam[20];//отведение в памяти компьютера места под строку длиной 20 символов
Организуем считывание (инициализацию) двух строк с клавиатуры:
prinf ("Как Вас зовут?\n");
prinf ("Введите свое имя и фамилию, затем нажмите Enter");
printf ("->");
scanf ("%s",&name);
scanf ("%s",&fam);
Здесь функция scanf читает из буфера клавиатуры символы до разделителя – пробела.
Выведем строки на экран:
printf ("Здравствуйте, %s %s!\n", name, fam);
Задержим результат на экране:
getch ();
Закроем главную функцию:
}
Блок-схема данной программы приведена на рисунке 1.
Блок 1 – начало
программного блока.
Блок 2 – ввод строк
name
и fam
с клавиатуры.
Блок 3 – вывод
значений строк name
и fam
на экран.
Блок 4 – конец
программного блока.
Рис.1. Блок-схема ввода и вывода строк
После запуска программы на выполнение, получим следующий результат:
Как Вас зовут?
Введите свое имя и фамилию, затем нажмите Enter
-> Иван Федоров
Здравствуйте, Иван Федоров!
Задача 2. Организация посимвольного считывания строк
Составим программу, которая запрашивает у пользователя строку, затем выводит эту строку, вставляя после каждой буквы дополнительный символ '*'.
Для реализации данной программы необходимо будет определить длину строки, затем в цикле с заданным количеством итераций, от первого символа строки до последнего (который определяется общей длиной строки), выводить отдельной каждый символ строки, вставляя после него символ '*'.
Блок-схема данной программы приведена на рисунке 2.
Рис.2. Блок-схема программы посимвольного считывания строк.
Текст программы будет выглядеть следующим образом:
Подключим библиотеки, в нашей программе их потребуется 4: stdafx.h, stdio.h, conio.h, string.h:
#include <stdafx.h
#include <stdio.h>
#include <conio.h>
#include <string.h>
Объявим главную функцию:
void main ()
{
Объявим строку:
char str[30];
Объявим дополнительные переменные (длину строки l и переменную цикла с заданным числом итераций i, целого типа):
int i,l;
Организуем считывание (инициализацию) строки с клавиатуры:
prinf ("Введите строку, затем нажмите Enter");
printf ("->");
scanf ("%s",&str);
Определим длину строки:
l=strlen(str);
В цикле с заданным количеством итераций будем посимвольно считывать каждый символ строки, вставляя после каждого символа знак '*', здесь – переменная i – текущий номер символа в строке:
for (i=0; i<=l; i++)
{
printf ("%c *",str[i]);
}
Задержим результат на экране:
getch ();
Закроем главную функцию:
}
После запуска программы на выполнение, получим следующий результат:
Введите строку, затем нажмите Enter
-> Здравствуйте
З*д*р*а*в*с*т*в*у*й*т*е*
Задача 3. Работа с кодами символов
Составим программу, которая запрашивает у пользователя строку в нижнем регистре и переводит введенные символы в верхний регистр.
Подобное преобразование основано на использовании таблицы кодировок ASCII. Символы нижнего регистра имеют в ней коды от 97(a) до 122(z), а верхнего – от 65 (A) до 90(Z). При этом символы в таблице располагаются последовательно. В результате чего преобразование можно осуществить просто путем вычитания из кода символа нижнего регистра значения 32. Например, пользователь вводит значение символа в строковом формате:
scanf ("%s",&str);
Для получения кода символа достаточно преобразовать введенный символ в числовой формат:
int a=int(str);
Далее проверяем, находится ли полученный код символа в нижнем регистре, то есть попадает в диапазон от 97 до 122 и при необходимости вычитаем из него число 32.
Текст программы будет выглядеть следующим образом:
Подключим библиотеки, в нашей программе их потребуется 4: stdafx.h, stdio.h, conio.h, string.h:
#include <stdafx.h
#include <stdio.h>
#include <conio.h>
#include <string.h>
Объявим главную функцию:
void main ()
{
Объявим строку:
char str[30];
Объявим дополнительные переменные (длину строки l и переменную цикла с заданным числом итераций i, целого типа):
int i,l;
Организуем считывание (инициализацию) строки с клавиатуры:
prinf ("Введите строку, затем нажмите Enter");
printf ("->");
scanf ("%s",&str);
Определим длину строки:
l=strlen(str);
Огранизуем посимвольное считывание строки, i – текущий номер символа в строке:
for (i=0; i<=l; i++)
{
Проверим условие, что текущий символ строки попадает в заданный диапазон, то есть является строчной буквой латинского алфавита. Для преобразования символа в его код используем оператор int, если условие истинно, то изменяем код символа, то есть вычитаем из него 32:
if (int(str[i])<=97 && int(str[i])>=122) int(str[i])=int(str[i])-32;
Выводим символ на экран:
printf ("%c ",str[i]);
Закрываем цикл с заданным количеством итераций:
}
Задерживаем результат на экране:
getch ();
Закрываем главную функцию:
}
В результате выполнения программы получим следующее:
Вариант 1. Все символы введенной строки будут являться строчными буквами латинского алфавита:
Введите строку, затем нажмите Enter
-> hello
HELLO
Вариант 2. Не все символы введенной строки будут являться строчными буквами латинского алфавита:
Введите строку, затем нажмите Enter
-> Hello123
HELLO123я
Блок-схема данной программы приведена на рисунке 3.
Рис.3. Блок-схема программы работы с кодами символов
Выполнить индивидуальные задания, выданные преподавателем.