Скачать презентацию Лекция 3 Строки Символьные строки char s 80 Скачать презентацию Лекция 3 Строки Символьные строки char s 80

Строки_3.ppt

  • Количество слайдов: 18

Лекция 3 Строки Лекция 3 Строки

Символьные строки char s[80]; s[2] признак окончания строки: символ с кодом 0 s[3] 79 Символьные строки char s[80]; s[2] признак окончания строки: символ с кодом 0 s[3] 79 0 П р и в е т ! ¤ ¤ … ¤ ¤ ¤ рабочая часть s[0] s[1] ! Символ '' имеет код 0 символ '0' имеет код 48 Символьная строка – это последовательность символов, заключенная в двойные кавычки, которая заканчивается символом ''. Строка символов хранится в памяти ЭВМ как массив символов. Значение символьной строки - это адрес ее первого символа. При трансляции программы компилятор разместит все символьные строки в памяти, а в программу вместо них подставит соответствующие адреса (т. е. значения символьных строк!).

Объявление символьных строк Объявить строку = выделить ей место в памяти и присвоить имя. Объявление символьных строк Объявить строку = выделить ей место в памяти и присвоить имя. выделяется 80 байт, в строке – char s[80]; «мусор» (если она глобальная, то нули '‘) char s 1[80] = "abc"; char qqq[] = "Вася"; ! выделяется 80 байт, занято 4 байта (с учетом '') выделяется 5 байт (с учетом '') • При выделении памяти надо учитывать место для символа ''. • В строку нельзя записывать больше символов, чем выделено памяти. 4

Ввод и вывод символьных строк Задача: ввести слово с клавиатуры и заменить все буквы Ввод и вывод символьных строк Задача: ввести слово с клавиатуры и заменить все буквы «а» на буквы «б» . %s – формат для ввода и вывода int main(){ символьных строк (выводится char q[80]; только часть до '' int i; начали с printf("Введите строкуn"); q[0] не надо ставить &: scanf( "%s", q); пока не дошли до &q[0] q i = 0; "%s" конца строки while ( q[i] != '' ) { if ( q[i] == 'а' ) q[i] = 'б'; i ++; переход к } следующему printf ( "Результат: %s ", q ); символу return 0; %s }

Ввод символьных строк Ввод одного слова: char q[80]; printf ( Ввод символьных строк Ввод одного слова: char q[80]; printf ("Введите текст: n"); scanf ( "%s", q ); printf ("Введено: n%s", q ); Введите текст: Вася пошел гулять Введено: Вася Ввод строки с пробелами: char q[80]; printf("Введите текст: n"); gets ( q ); printf("Введено: n%s", q ); Введите текст: Вася пошел гулять Введено: Вася пошел гулять 6

Вывод символьных строк Универсальный способ: printf ( Вывод символьных строк Универсальный способ: printf ( "Результат: %s", q ); • можно выводить сразу и другую информацию: надписи, значения переменных, … Только для одной строки: puts ( q ); printf ( "%sn", q ); • вывод только одной строки • после вывода – переход на новую строку 7

Функции для работы со строками Подключение библиотеки: #include <string. h> или новый стандарт #include Функции для работы со строками Подключение библиотеки: #include или новый стандарт #include Длина строки: strlen (string length) char q[80] = "qwerty"; n = 6 int n; n = strlen ( q ); ! При определении длины символ '' не учитывается! 8

Сравнение строк strcmp (string comparison): char q 1[80], q 2[80]; int n; gets ( Сравнение строк strcmp (string comparison): char q 1[80], q 2[80]; int n; gets ( q 1 ); gets ( q 2 ); n = strcmp ( q 1, q 2 ); ! Функция вычисляет разность между кодами первых двух отличающихся символов!

Пример решения задачи Задача: ввести строку и определить, сколько в ней слов. Программа должна Пример решения задачи Задача: ввести строку и определить, сколько в ней слов. Программа должна работать только при вводе правильного пароля. Идея решения: • проверка пароля – через strcmp • количество слов = количеству первых букв слова • первая буква: пробел и за ним «не пробел» В а с я п о ш е л г у л я т ь ¤ ¤ ¤ • исключение: предложение начинается со слова (а не с пробела)

Проверка пароля #include <string. h> int main() { char secret[] = Проверка пароля #include int main() { char secret[] = "123", pass[20]; если пароль printf ( "Введите парольn" ); неверный. . . gets ( pass ); if ( strcmp ( pass, secret ) != 0 ) { printf ( "Пароль неверный" ); сообщить об getch (); ошибке и выйти return 1; из программы } аварийное. . . завершение, return 0 код ошибки 1 } 11

Основная часть программы #include <stdio. h> #include <string. h> int main() { предыдущий слайд Основная часть программы #include #include int 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 ); return 0; } 12

Копирование строк strcpy (string copy) char q 1[10] = Копирование строк strcpy (string copy) char q 1[10] = "qwerty", q 2[10] = "01234"; strcpy ( q 1, q 2 ); куда откуда ! Старое значение q 1 стирается! копирование «хвоста» строки char q 1[10] = "qwerty", q 2[10] = "01234"; strcpy ( q 1, q 2+2 ); q 2 = &q 2[0] q 1 q w e t y ¤ ¤ ¤ 2 3 4 r q 2+2 = &q 2[2] q 2 0 1 2 3 4 ¤ ¤

Копирование строк копирование в середину строки char q 1[10] =

Копирование строк strncpy – копирование нескольких символов char q 1[10] = Копирование строк strncpy – копирование нескольких символов char q 1[10] = "qwerty", q 2[10] = "01234"; strncpy ( q 1+2, q 2, 2 ); q 1+2 = &q 1[2] q 1 q w 0 1 t y ¤ ¤ ¤ e r ! q 2 0 1 2 3 4 ¤ ¤ Функция strncpy не добавляет символ '' в конце строки!

Копирование строк копирование строки-константы char q 1[10] = Копирование строк копирование строки-константы char q 1[10] = "qwerty"; strcpy ( q 1+1, "ABCD"); q 1 q w B C D ¤ ¤ ¤ A e r t y A B C D char q 1[10] = "qwerty"; strcpy ( "ABCD", q 1+2 ); ! Первым параметром НЕ может быть константа!

Копирование строк копирование внутри одной строки char q[10] = Копирование строк копирование внутри одной строки char q[10] = "012345"; strcpy ( q, q+2 ); q 2 3 4 5 4 0 1 2 3 5 ¤ ¤ ¤ char q[10] = "012345"; strcpy ( q+2, q ); q 0 1 0 1 1 ¤ ¤ 2 3 4 5 0 ¤ Зацикливание! 17

Объединение строк strcat (string concatenation) = копирование второй строки в конец первой char q Объединение строк strcat (string concatenation) = копирование второй строки в конец первой char q 1[10] = "qwe", q 2[10] = "0123"; strcat ( q 1, q 2 ); q 1 q w e 1 2 3 ¤ ¤ ¤ ¤ q 2 0 1 2 3 ¤ ¤ ¤ char q 1[10] = "qwe", q 2[10] = "0123"; strcat ( q 1, q 2+2 ); q 1 q w e 3 ¤ ¤ 2 ¤ ¤ q 2 0 1 2 3 ¤ ¤ ¤ 18

Проблемы при копировании строк • не хватает места для строки-результата char q 1[] = Проблемы при копировании строк • не хватает места для строки-результата char q 1[] = "qwer", q 2[10] = "01234"; strcpy ( q 1+2, q 2 ); q 1 q w 0 1 3 что-то другое q 2 0 1 2 3 ¤ ¤ ¤ e r 2 • зацикливание при копировании в ту же строку «слева направо» char q[10] = "01234"; strcpy ( q+2, q ); ! Транслятор не сообщает об этих ошибках! 19