struct outer{
int a;
struct inner{
char c;
};
};
(a) В Си не разрешены вложенные структуры
(b) Необходимо инициализировать поля структуры
(c) Внутренняя структура должна иметь имя
(d) Внешняя структура должна иметь имя
(e) Нет никаких ошибок
✔
2
Это массивы символов:
Для массива:
каждый символ – отдельный объект;
массив имеет длину N, которая задана при объявлении
Что нужно:
обрабатывать последовательность символов как единое целое
строка должна иметь переменную длину
Символьная строка – это последовательность символов, которая заканчивается символом '\0'.
char s[80];
char s1[80] = "abc";
char qqq[] = "Вася";
выделяется 80 байт, в строке – «мусор» (если она глобальная, то нули '\0‘)
выделяется 80 байт, занято 4 байта
(с учетом '\0')
выделяется 5 байт
(с учетом '\0')
/* указатель на символ */
/* или & str[0] */
/* "A12345" */
/* перейти к str[1] */
/* "AB2345“ */
/* перейти к str[2] */
/* "ABCD" */
/* "ABCDqqq" */
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]
Ввод символьных строк
Введите текст:
Вася пошел гулять
Введено:
Вася
char q[80];
printf("Введите текст:\n");
gets ( q );
printf("Введено:\n%s", q );
Введите текст:
Вася пошел гулять
Введено:
Вася пошел гулять
gets ( q );
Вывод символьных строк
puts ( q );
можно выводить сразу и другую информацию: надписи, значения переменных, …
вывод только одной строки
после вывода – переход на новую строку
printf ( "%s\n", q );
Подключение библиотеки:
#include char q[80] = "qwerty"; n = 6
int n;
n = strlen ( q );
strcmp (string comparison):
если пароль неверный...
сообщить об ошибке и выйти из программы
аварийное завершение, код ошибки 1
особый случай
если нашли пробел, а за ним не пробел…
предыдущий слайд
куда
откуда
копирование «хвоста» строки
char q1[10] = "qwerty", q2[10] = "01234";
strcpy ( q1, q2+2 );
q2
q1
q2 = &q2[0]
q2+2 = &q2[2]
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]
q2
q1
q1+2 = &q1[2]
q1
char q1[10] = "qwerty";
strcpy ( "ABCD", q1+2 );
НЕ
q
char q[10] = "012345";
strcpy ( q+2, q );
q
Зацикливание и зависание компьютера!
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
не хватает места для строки-результата
q2
q1
зацикливание при копировании в ту же строку «слева направо»
char q[10] = "01234";
strcpy ( q+2, q );
поиск точки
дошли до конца строки
меняем или добавляем расширение
Указатель – это переменная в которую можно записать адрес другой переменной заданного типа.
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
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
start
p
p = strstr( start, "Вася");
начало поиска
адрес найденного слова
c = s[i];
s[i] = s[len-i-1];
s[len-1-i] = c;
s[i]
s[len-1-i]
0987654321
0987612345
длину строки определяем на месте
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' )
Дубовая роща. Девочка и апельсин
Если не удалось найти и скачать презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:
Email: Нажмите что бы посмотреть