Использование массивов строк...124

We use cookies. Read the Privacy and Cookie Policy

Допустим, мне понадобилась функция, возвращающая название месяца по его номеру. Например, если этой функции передать число 1, она вернёт название первого месяца — "Январь". Номер месяца будет считаться неправильным, если он окажется меньше 1 или больше 12.

_________________

124 стр. Часть 2. Становимся функциональными программистами

Эту функцию можно написать следующим образом:

      /* int2month( ) — возвращает название месяца */

      char* int2month( int nMonth )

      {

           char* pszReturnValue ;

           switch( nMonth )

           {

               case 1 : pszReturnValue = "Январь" ;

                      break ;

               case 2 : pszReturnValue = "Февраль" ;

                      break ;

               case 3 : pszReturnValue = "Март" ;

                      break ;

               /* и так далее... */

               default : pszReturnValue = "Неверный номер месяца"

           }

           return pszReturnValue ;

      }

«Оператор switch( ) действует так же, как совокупность операторов if

[Помни!]

Эту задачу можно решить более элегантно, использовав номер месяца как индекс в массиве указателей, представляющих названия месяцев. Тогда программа приобретёт такой вид:

      /* int2month( ) — возвращает название месяца */

      char* int2month( int nMonth )

      {

           /* проверка правильности номера месяца */

           if ( nMonth < 1 || nMonth > 12 )

           {

               return "invalid" ;

           }

           /* nMonth имеет корректное значение */

           /* Вернём имя месяца */

           char* pszMonths[ ] = { "Ошибка" ,

                                                "Январь" ,

                                                "Февраль" ,

                                                "Март" ,

                                                "Апрель" ,

                                                "Май" ,

                                                "Июнь" ,

                                                "Июль" ,

                                                "Август" ,

                                                "Сентябрь" ,

                                                "Октябрь" ,

                                                "Ноябрь" ,

                                                "Декабрь" } ;

           return pszMonths[ nMonth ] ;

      }

Сначала в этой программе проверяется корректность аргумента nMonth, т.е. что его значение лежит в диапазоне между 1 и 12 включительно ( в предыдущей программе проверка производилась, по сути, оператором default ). Если значение nMonth правильное, оно используется как смещение внутри массива, содержащего названия месяцев.

_________________

125 стр. Глава 9. Второе знакомство с указателями

«Такой способ обращения к строкам по индексу особенно полезен при написании программы, работающей на разных языках. Например, массив названий месяцев может инициализироваться во время работы с названиями на разных языках, так что ptrMonth[ 1 ] всегда будет указывать на январь независимо от используемого языка.»

[Советы]