Символьные массивы – строки. Функции для работы с текстом. Двумерные массивы – матрицы, страница 3

   for (j=i+1; s[j]!='\0'; j++) if(s[i]==s[j]) count++;

           printf("\n (%c) - %d", s[i],count);

           count=1;

        }

  }

}

Пример 4б. Написать программу, которая отображает встречаемые в строке символы с частотой появления каждого из них (с использованием библиотечных функций).

#include<string.h>

#define L 80

void main()

{

 char s[L], *p;

 int i, j, count = 1;

 puts ("\n Enter string:");

 gets (s);

 for(i = 0; s[i] != '\0'; i++, count = 1)

   {

    p = (s+i);

    if ((strchr (s, s[i])) == p) // если символ не встречался раньше

        {

         while(p = strchr(p+1, s[i]))  count++;

         printf("\n (%c) - %d", s[i], count);

        }

   }

}

Пример 5а. Написать программу, которая определяет, является ли данная строка палиндромом, то есть читается одинаково в прямом и обратном направлении (без использования библиотечных функций).

void main()

{

 char s[L];

 int i, j, k, l;

 puts ("\n Enter string:");

 gets (s);

 for (l = 0; s[l] != '\0'; l ++);

 k = l / 2;

 l - - ;

 for (i = 0; i < k; i++, l--) if (s[i] != s[l]) break;

 if (i == k) puts ("Yes!");

else puts ("No !");

}

Пример 5б. Написать программу, которая определяет, является ли данная строка палиндромом, то есть читается одинаково в прямом и обратном направлении (с использованием библиотечных функций).

void main()

{

 char str[L], *p;

 puts ("\n Enter string:");

 gets (str);

 strcpy (p,str);

 if ((strcmp (str, strrev (p))) == 0) puts ("Yes!");

        else puts ("No!");

}

Вопросы  для самоконтроля

1.  Дайте определение массива, определите массив из 20 элементов целого типа.

2.  Какими способами возможен доступ к элементу массива, запишите примеры.

3.  Какие характеристики массива компилятор фиксирует в таблице-дескрипторе?

4.  Как определить размер памяти, отводимой под массив?

5.  Что такое строка? Какими способами можно определять строки в программе?

6.  Какой последовательностью операторов можно перевести число в строку и наоборот?

7.  Запишите последовательность действий для исключения из массива элемента с заданным значением.

8.  Запишите последовательность операторов для добавления числа в необходимую позицию в массиве?

9.  Какие библиотечные функции по обработке символов можете назвать?

10. Перечислите и запишите примеры использования функций по работе со строками.

Двумерные массивы – МАТРИЦЫ

          int matrix [N][M];

Одномерные массивы соответствуют векторам, двумерным массивам можно поставить в соответствие – матрицы.

 Двумерные массивы – это вид удобной записи, так как память имеет одно измерение.

Наименьший адрес в памяти соответствует значению элемента первого столбца в первой строке matrix [0][0], наибольший адрес – значению элемента в последнем столбце последней строки матрицы matrix [N-1][M-1].

Доступ к элементам осуществляется по индексам строк и индексам столбцов.

Можем представить двумерный массив как одномерный, каждый элемент которого есть одномерный массив.

Двумерный массив может быть инициализирован присваиванием элементам по одной строке каждый раз:

int matrix [][4] = {{3,5,7}, {-2,-4,-6}, {1,7,13}};

При таком  описании в памяти будет выделен блок для таблицы размером (3х4) х 2 байта, общим объемом – 24 байта. Последний элемент в каждой строке будет содержать нулевое значение.

Для доступа к элементу матрицы, компилятор расширяет таблицу –   дескриптор  массива, включая информацию о количестве столбцов и длине каждой строки: