Разделы презентаций


Строки

Содержание

Организация курса

Слайды и текст этой презентации

Слайд 1Строки
Алтайский государственный университет Математический факультет Кафедра информатики
Барнаул 2013

СтрокиАлтайский государственный университет Математический факультет Кафедра информатикиБарнаул 2013

Слайд 2Организация курса

Организация курса

Слайд 3План
Лекция 13
Строки: общие сведения
Функции для работы со строками
Строки как параметры

функций



ПланЛекция 13	Строки: общие сведенияФункции для работы со строкамиСтроки как параметры функций

Слайд 4Несколько заданий для самопроверки

Несколько заданий  для самопроверки

Слайд 5Три задания для самопроверки
Задание 1
Что описывают следующие объявления?
void *comp() ;
void

(*cmp)();
char (*(*x())[])();
comp – функция, возвращающая указатель на void

cmp

– указатель на функцию, возвращающую void

x – функция, возвращающая указатель на массив из указателей на функции, возвращающие char
Три задания для самопроверкиЗадание 1Что описывают следующие объявления?void *comp() ;void (*cmp)(); char (*(*x())[])(); comp – функция, возвращающая

Слайд 6Три задания для самопроверки
Задание 2
Что выведет на экран следующая программа?
#include



void main() {
int const * p=5;
printf("%d",++(*p));
}
При

компиляции возникнет ошибка: попытка изменить константное значение по указателю
Три задания для самопроверкиЗадание 2Что выведет на экран следующая программа?#include void main() {  int const *

Слайд 7Три задания для самопроверки
Задание 3
Что выведет на экран следующая программа?
#include



void main() {
int A[]={2,5,7,3,4}, *p=A+3;
printf("%d%d",p[-2],-1[p]);
}
57

Три задания для самопроверкиЗадание 3Что выведет на экран следующая программа?#include void main() {  int A[]={2,5,7,3,4}, *p=A+3;

Слайд 8Строки: общие сведения
Массивы символов
Символьные строки
Объявление строк
Указатели и строки
Ввод и вывод

строк

Строки:  общие сведенияМассивы символовСимвольные строкиОбъявление строкУказатели и строкиВвод и вывод строк

Слайд 9Строки: общие сведения
Чем плох массив символов?
char A[4] = { 'A',

'3', '[', 'Ж'};
char B[10];
Это массивы символов:
Для массива:
каждый символ –

отдельный объект;
массив имеет длину N, которая задана при объявлении

Что нужно:
обрабатывать последовательность символов как единое целое
строка должна иметь переменную длину

Строки: общие сведенияЧем плох массив символов?char A[4] = { 'A', '3', '[', 'Ж'};char B[10];Это массивы символов:Для массива:

Слайд 10Строки: общие сведения
Символьные строки
рабочая часть
s[0]
s[1]
s[2]
s[3]
char s[80];
признак окончания строки: символ с

кодом 0
Символьная строка – это последовательность символов, которая заканчивается символом

'\0'.
Строки: общие сведенияСимвольные строкирабочая частьs[0]s[1]s[2]s[3]char s[80];признак окончания строки: символ с кодом 0Символьная строка – это последовательность символов,

Слайд 11Строки: общие сведения
Объявление символьных строк
Объявить строку = выделить ей место

в памяти и присвоить имя.

char s[80];

char s1[80] = "abc";

char

qqq[] = "Вася";

выделяется 80 байт, в строке – «мусор» (если она глобальная, то нули '\0‘)

выделяется 80 байт, занято 4 байта (с учетом '\0')

выделяется 5 байт
(с учетом '\0')

Строки: общие сведенияОбъявление символьных строкОбъявить строку = выделить ей место в памяти и присвоить имя.char s[80]; char

Слайд 12Строки: общие сведения
Указатели и символьные строки
char str[10] = "0123456";
char *p;


p = str;


*p = 'A';
p ++;
*p = 'B';
p ++;
strcpy ( p, "CD" );
strcat ( p, "qqq" );
puts ( p );

/* указатель на символ */
/* или & str[0] */
/* "A12345" */
/* перейти к str[1] */
/* "AB2345“ */
/* перейти к str[2] */
/* "ABCD" */
/* "ABCDqqq" */

Строки: общие сведенияУказатели и символьные строкиchar str[10] =

Слайд 13Строки: общие сведения
Ввод и вывод символьных строк
Задача: ввести слово с

клавиатуры и заменить все буквы «а» на буквы «б».
void main()
{

char q[80];
int i;
printf("Введите строку\n");
scanf( "%s", q);
i = 0;
while ( q[i] != '\0' ) {
if ( q[i] == 'а' ) q[i] = 'б';
i ++;
}
printf ( "Результат: %s ", q );
}

%s

не надо ставить &:
q  &q[0]

%s – формат для ввода и вывода символьных строк (выводится только часть до '\0'

"%s"

пока не дошли до конца строки

переход к следующему символу

начали с q[0]

Строки: общие сведенияВвод и вывод символьных строкЗадача: ввести слово с клавиатуры и заменить все буквы «а» на

Слайд 14Строки: общие сведения
Ввод одного слова:



Ввод строки с пробелами:
char q[80];
printf ("Введите

текст:\n");
scanf ( "%s", q );
printf ("Введено:\n%s", q );
Ввод символьных строк
Введите

текст:
Вася пошел гулять
Введено: Вася

char q[80];
printf("Введите текст:\n");
gets ( q );
printf("Введено:\n%s", q );

Введите текст:
Вася пошел гулять
Введено: Вася пошел гулять

gets ( q );

Строки: общие сведенияВвод одного слова:Ввод строки с пробелами:char q[80];printf (

Слайд 15Строки: общие сведения
Универсальный способ:



Только для одной строки:
printf ( "Результат: %s",

q );
Вывод символьных строк
puts ( q );
можно выводить сразу и

другую информацию: надписи, значения переменных, …

вывод только одной строки
после вывода – переход на новую строку

printf ( "%s\n", q );

Строки: общие сведенияУниверсальный способ:Только для одной строки:printf (

Слайд 16Строки: общие сведения
Упражнения
1. Ввести символьную строку и заменить

все буквы "а" на буквы "б" и наоборот, как заглавные,

так и строчные.
Пример:
Введите строку:
ааббссААББСС
Результат:
ббаассББААСС
2. Ввести символьную строку и проверить, является ли она палиндромом (палиндром читается одинаково в обоих направлениях).
Пример: Пример:
Введите строку: Введите строку:
АБВГДЕ КАЗАК
Результат: Результат:
Не палиндром. Палиндром.
Строки: общие сведенияУпражнения  1. Ввести символьную строку и заменить все буквы

Слайд 17Функции для работы со строками
Длина строки
Сравнение строк
Копирование строк
Объединение строк
Поиск в

строке

Функции для  работы со строкамиДлина строкиСравнение строкКопирование строкОбъединение строкПоиск в строке

Слайд 18Функции для работы со строками
Функции для работы со строками
Длина строки:

(string length) size_t strlen(const char *)
Подключение библиотеки:
#include
char q[80] =

"qwerty";
int n;
n = strlen ( q );

n = 6

Функции для работы со строкамиФункции для работы со строкамиДлина строки: (string length)   size_t strlen(const char

Слайд 19Функции для работы со строками
Сравнение строк (string comparison)
char q1[80], q2[80];
int

n;
gets ( q1 );
gets ( q2 );
n = strcmp (

q1, q2 );

int strcmp(const char *, const char *)

Функции для работы со строкамиСравнение строк (string comparison)char q1[80], q2[80];int n;gets ( q1 );gets ( q2 );n

Слайд 20Функции для работы со строками
Пример решения задачи
Задача: ввести строку и

определить, сколько в ней слов. Программа должна работать только при

вводе правильного пароля.
Идея решения:
проверка пароля – через strcmp
количество слов = количеству первых букв слова
первая буква: пробел и за ним «не пробел»


исключение: предложение начинается со слова (а не с пробела)
Функции для работы со строкамиПример решения задачиЗадача: ввести строку и определить, сколько в ней слов. Программа должна

Слайд 21Функции для работы со строками
Проверка пароля
#include
void main()
{
char secret[]

= "123", pass[20];
printf ( "Введите пароль\n" );
gets (

pass );
if ( strcmp ( pass, secret ) != 0 )
{
printf ( "Пароль неверный" );
getch ();
return 1;
}
...
}

если пароль неверный...

сообщить об ошибке и выйти из программы

аварийное завершение, код ошибки 1

Функции для работы со строкамиПроверка пароля#include void main(){ char secret[] =

Слайд 22Функции для работы со строками
Основная часть программы
#include
#include
void main()
{

char q[80];
int i, len, count = 0;
...

/* проверка пароля */
printf ("Введите предложение\n");
gets ( q );
len = strlen( q );
if ( q[0] != ' ') count++;
for ( i = 0; i < len - 1; i ++ )
if ( q[i] == ' ' && q[i+1] != ' ' )
count ++;
printf ( "Найдено %d слов", count );
}

особый случай

если нашли пробел, а за ним не пробел…

предыдущий слайд

Функции для работы со строкамиОсновная часть программы#include #include void main(){ char q[80]; int i, len, count =

Слайд 23Функции для работы со строками
Подсказка: для вывода одного символа используйте

функцию putchar(символ). Например:
Упражнения
1. Ввести предложение и определить, сколько

слов заканчиваются на букву 'а'.
Пример:
Введите предложение: Введите предложение:
Мама мыла раму Декан пропил бутан Найдено слов: 2 Нет таких слов
2. Ввести предложение и разобрать его на отдельные слова:
Пример:
Введите предложение:
Мама мыла раму
Результат:
Мама
мыла
раму

putchar(q[i]);
putchar('\n'); // переход на новую строку

Функции для работы со строкамиПодсказка: для вывода одного символа используйте функцию putchar(символ). Например:Упражнения  1. Ввести предложение

Слайд 24Функции для работы со строками
Копирование строк (string copy)

char *strcpy(char *toHere,

const char *fromHere);
char q1[10] = "qwerty", q2[10] = "01234";

strcpy

( q1, q2 );

куда

откуда

копирование «хвоста» строки

char q1[10] = "qwerty", q2[10] = "01234";
strcpy ( q1, q2+2 );

q2

q1

q2 = &q2[0]

q2+2 = &q2[2]

Функции для работы со строкамиКопирование строк (string copy)char *strcpy(char *toHere, const char *fromHere); char q1[10] =

Слайд 25Функции для работы со строками
Копирование строк
копирование в середину строки
char q1[10]

= "qwerty", q2[10] = "01234";
strcpy ( q1+2, q2 );
q2
q1
q1+2 =

&q1[2]

char q1[10] = "qwerty", q2[10] = "01234";
strcpy ( q1+2, q2+3 );

q2

q1

q2+3 = &q2[3]

q1+2 = &q1[2]

Функции для работы со строкамиКопирование строккопирование в середину строкиchar q1[10] =

Слайд 26Функции для работы со строками
Копирование строк (копирование n символов)

char *strncpy(char

*toHere, const char

*fromHere, size_t n);

char q1[10] = "qwerty", q2[10] = "01234";
strncpy ( q1+2, q2, 2 );

q2

q1

q1+2 = &q1[2]

Функции для работы со строкамиКопирование строк (копирование n символов)char *strncpy(char *toHere,

Слайд 27Функции для работы со строками
Копирование строк
копирование строки-константы
char q1[10] = "qwerty";
strcpy

( q1+1, "ABCD");
q1
char q1[10] = "qwerty";
strcpy ( "ABCD", q1+2 );
НЕ

Функции для работы со строкамиКопирование строккопирование строки-константыchar q1[10] =

Слайд 28Функции для работы со строками
Копирование строк
копирование внутри одной строки
char q[10]

= "012345";
strcpy ( q, q+2 );
q
char q[10] = "012345";
strcpy (

q+2, q );

q

Зацикливание и зависание компьютера!

Функции для работы со строкамиКопирование строккопирование внутри одной строкиchar q[10] =

Слайд 29Функции для работы со строками
Объединение строк
string concatenation = копирование

второй строки в конец первой, сцепление строк
char q1[10] = "qwe",

q2[10] = "0123";
strcat ( q1, q2 );

q2

q1

char q1[10] = "qwe", q2[10] = "0123";
strcat ( q1, q2+2 );

q2

q1

char *strcat(char *dest, const char *src);

Функции для работы со строкамиОбъединение строк string concatenation = копирование второй строки в конец первой, сцепление строкchar

Слайд 30Функции для работы со строками
что-то другое
Проблемы при копировании строк
char q1[]

= "qwer", q2[10] = "01234";
strcpy ( q1+2, q2 );
не хватает

места для строки-результата

q2

q1

зацикливание при копировании в ту же строку «слева направо»

char q[10] = "01234";
strcpy ( q+2, q );

Функции для работы со строкамичто-то другоеПроблемы при копировании строкchar q1[] =

Слайд 31Функции для работы со строками
Пример решения задачи
Задача: ввести имя файла

(без пути) и поменять его расширение на ".exe".
Пример:


Введите имя файла: Введите имя файла:
vasya.html vasya
Результат: Результат:
vasya.exe vasya.exe
Алгоритм:
найти точку в имени файла
если она есть, скопировать в это место строку-константу ".exe"
если точки нет, добавить в конец строки ".exe"
Функции для работы со строкамиПример решения задачиЗадача: ввести имя файла (без пути) и поменять его расширение на

Слайд 32Функции для работы со строками
Программа
void main()
{
char fName[80];
int i;
printf("Введите имя файла\n");
gets (

fName );
i = 0;
while ( fName[i] != '.' ) {

if ( fName[i] == '\0' ) break;
i ++;
}
if ( fName[i] == '.' )
strcpy ( fName+i, ".exe" );
else strcat ( fName, ".exe" );
puts ( "Результат:" );
puts ( fName );
}

поиск точки

дошли до конца строки

меняем или добавляем расширение

Функции для работы со строкамиПрограммаvoid main(){char	fName[80];int i;printf(

Слайд 33Функции для работы со строками
Упражнения
1. Ввести полный адрес

файла (возможно, без расширения) и изменить его расширение на «.exe».

Пример:
Введите имя файла: Введите имя файла:
C:\DOC.TXT\qqq C:\DOC.TXT\qqq.com
Результат: Результат:
C:\DOC.TXT\qqq.exe C:\DOC.TXT\qqq.exe
2. Ввести в одной строке фамилию, имя и отчество. Вывести приветствие, где останутся имя и фамилия (см. пример).
Пример:
Введите ФИО:
Пупкин Василий Иванович
Результат:
Привет, Василий Пупкин!
Функции для работы со строкамиУпражнения  1. Ввести полный адрес файла (возможно, без расширения) и изменить его

Слайд 34Функции для работы со строками
Поиск в символьных строках
Задача: найти заданный

символ или сочетание символов (подстроку) в символьной строке.
Указатель – это

переменная в которую можно записать адрес другой переменной заданного типа.
Функции для работы со строкамиПоиск в символьных строкахЗадача: найти заданный символ или сочетание символов (подстроку) в символьной

Слайд 35Функции для работы со строками
Поиск символа (первого c начала строки)
char

*strchr(const char *, int)
strrchr: найти последний заданный символ в

строке

char q[10] = "abcdabcd";
char *p;
int nomer;
p = strchr(q, 'b');
if ( p == NULL )
printf ( "Не нашли..." );
else {
nomer = p – q;
printf ( "Номер символа %d", nomer );
}

q

q+1

q+5

p

reverse

Функции для работы со строкамиПоиск символа (первого c начала строки)char *strchr(const char *, int) strrchr: найти последний

Слайд 36Функции для работы со строками
Поиск подстроки (первой с начала строки)
char

q[10] = "abcdabcd";
char *p;
int nomer;
p = strstr(q, "bcd");


if ( p == NULL )
printf ( "Не нашли..." );
else {
nomer = p – q;
printf ( "Номер первого символа %d", nomer );
}

q

q+1

q+5

p

char *strstr(const char *str, const char *substr);

Функции для работы со строкамиПоиск подстроки (первой с начала строки)char q[10] =

Слайд 37Функции для работы со строками
Пример решения задачи
Задача: ввести предложение и

определить, сколько раз в нем встречается имя «Вася».
Проблема: функция

strstr ищет только с начала строки.
Алгоритм:
Записать адрес начала строки в указатель start.
Искать подстроку «Вася», начиная с адреса start.

Если не нашли, выход из цикла.
Увеличить счетчик найденных слов.
Переставить start на адрес после найденного слова.
Перейти к шагу 2.

start

p

p = strstr( start, "Вася");

Функции для работы со строкамиПример решения задачиЗадача: ввести предложение и определить, сколько раз в нем встречается имя

Слайд 38Функции для работы со строками
Программа
void main()
{
char q[80], *start, *p;

int count = 0;
puts ( "Введите предложение" );

gets ( q );
start = q; /* ищем с начала строки */
while ( 1 ) {
p = strstr ( start, "Вася" );
if ( p == NULL ) break;
count ++;
start = p + 4; /* отсюда ищем следующее слово */
}
printf ( "Имя 'Вася' встречается %d раз", count );
}

начало поиска

адрес найденного слова

Функции для работы со строкамиПрограммаvoid main(){ char q[80], *start, *p; int count = 0;  puts (

Слайд 39Организация курса
Строка в целое
int atoi(const char *str);

Cтрока в число с

плавающей точкой

double atof(const char *str);

Строка в целое

int strtol(const char *str,

char **endptr);

Cтрока в число с плавающей точкой

double strtod(const char *str, char **endptr);


Функции преобразования строк в числа

Организация курсаСтрока в целое int atoi(const char *str); Cтрока в число с плавающей точкойdouble atof(const char *str);Строка в

Слайд 40Организация курса
Вывод в строку
int sscanf(const char *s, const char *format,...);



Ввод из строки

int sprintf(char *s, const char *format, ...);



Функции преобразования

в(из) строку(и)

char sto[100], sfrom[] = “1234.5";
float a = 3.1415;

sprintf(sto, “%8.5f”, a);
sscanf(sfrom, “%f”, &a);

Организация курсаВывод в строку int sscanf(const char *s, const char *format,...); Ввод из строкиint sprintf(char *s, const

Слайд 41Функции для работы со строками
Упражнения
1. Ввести предложение и заменить

все имена «Вася» на «Юра».
Пример:
Введите предложение:
Вася,

Вася, Вася и Вася!!!
Результат:
Юра, Юра, Юра и Юра!!!
2. Ввести предложение и заменить все имена «Юра» на «Вася».
Пример:
Введите предложение:
Юра, Юра, Юра и Юра!!!
Результат:
Вася, Вася, Вася и Вася!!!
Функции для работы со строкамиУпражнения 1. Ввести предложение и заменить все имена «Вася» на «Юра».  Пример:

Слайд 42Строки как параметры функций
Передача параметров-строк
Примеры функций со строковыми параметрами

Строки как  параметры функцийПередача параметров-строкПримеры функций со строковыми параметрами

Слайд 43Строки как параметры функций
Символьные строки в функциях
Задача: составить процедуру, которая

переставляет символы строки в обратном порядке.
Алгоритм:
определить длину строки len;
все

символы первой половины переставить с соответствующими символами второй половины:

c = s[i];
s[i] = s[len-i-1];
s[len-1-i] = c;

s[i]

s[len-1-i]

Строки как параметры функцийСимвольные строки в функцияхЗадача: составить процедуру, которая переставляет символы строки в обратном порядке. Алгоритм:определить

Слайд 44Строки как параметры функций
Программа
void Reverse ( char s[] )
{
int

len = strlen(s);
char c;
for ( i = 0;

i < len/2; i ++ ) {
c = s[i];
s[i] = s[len-i-1];
s[len-1-i] = c;
}
}

void main(){
char s[] = "1234567890";
Reverse ( s );
puts ( s );
Reverse ( s + 5 );
puts ( s );
}

0987654321

0987612345

длину строки определяем на месте

Строки как параметры функцийПрограммаvoid Reverse ( char s[] ){ int len = strlen(s); char c; for (

Слайд 45Строки как параметры функций
Упражнения
1. Разработать функцию, которая переставляет

пары соседних символов.
Пример:
Введите предложение:
Вася пошел гулять!

Результат:
аВясп шолег лутя!ь
2. Разработать функцию, которая удаляет все лишние пробелы (в начале предложения и сдвоенные пробелы).
Пример:
Введите предложение:
Вася пошел гулять!
Результат:
Вася пошел гулять!
Строки как параметры функцийУпражнения  1. Разработать функцию, которая переставляет пары соседних символов.  Пример:	 Введите предложение:

Слайд 46Строки как параметры функций
Символьные строки в функциях
Задача: составить функцию, которая

находит количество цифр в строке.
int NumDigits ( char s[]

)
{
int i, count = 0;
for ( i = 0; i < strlen(s); i ++ )
if( strchr ( "0123456789", s[i] ) )
count ++;
return count;
}

if ( strchr ( "0123456789", s[i] ) != NULL )
или
if ( '0' <= s[i] && s[i] <= '9' )

Строки как параметры функцийСимвольные строки в функцияхЗадача: составить функцию, которая находит количество цифр в строке. int NumDigits

Слайд 47Строки как параметры функций
Символьные строки в функциях
Основная программа
int NumDigits (

char s[] )
{
...
}
void main()
{
char s[80];
int n;
printf (

"Введите строку\n" );
gets ( s );
n = NumDigits ( s );
printf ( "Нашли %d цифр.", s );
}
Строки как параметры функцийСимвольные строки в функцияхОсновная программаint NumDigits ( char s[] ){...}void main(){ char s[80]; int

Слайд 48Строки как параметры функций
Упражнения
1. Разработать функцию, которая определяет,

верно ли, что слово – палиндром.
Пример:
Введите слово:

Введите слово:
казак кунак
Результат: Результат:
Это палиндром. Не палиндром.
2. Разработать функцию, которая определяет, верно ли, что предложение (с пробелами) – палиндром.
Пример:
Введите предложение:
а роза упала на лапу азора
Результат:
Это палиндром.
Строки как параметры функцийУпражнения  1. Разработать функцию, которая определяет, верно ли, что слово – палиндром.

Слайд 49Вопросы и ответы
Вопросы?
Строки: общие сведения
Массивы символов
Символьные строки
Объявление строк
Указатели и строки
Ввод

и вывод строк
Функции для работы со строками
Длина строки
Сравнение строк
Копирование строк
Объединение

строк
Поиск в строке
Строки как параметры функций
Передача параметров-строк
Примеры функций со строковыми параметрами

Дубовая роща. Девочка и апельсин

Вопросы и ответыВопросы?Строки: общие сведенияМассивы символовСимвольные строкиОбъявление строкУказатели и строкиВвод и вывод строкФункции для работы со строкамиДлина

Обратная связь

Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое TheSlide.ru?

Это сайт презентации, докладов, проектов в PowerPoint. Здесь удобно  хранить и делиться своими презентациями с другими пользователями.


Для правообладателей

Яндекс.Метрика