Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lekcii_1_10 / Лекция 07.docx
Скачиваний:
52
Добавлен:
21.05.2015
Размер:
328.19 Кб
Скачать

Передача функциям строк

Как вы уже знаете, строки в C++ — это обычные символьные массивы, которые завершаются нулевым символом. Таким образом, при передаче функции строки реально передается только указатель (типа char*) на начало этой строки. Рассмотрим, например, следующую программу. В ней определяется функция stringupper(), которая преобразует строку символов в ее прописной эквивалент.

// Передача функции строки.

#include <iostream>

#include <cstring>

#include <cctype>

using namespace std;

void stringupper(char *str);

int main()

{

 char str[80];

 strcpy(str, "Мне нравится C++");

 stringupper(str);

cout << str; // Отображаем строку с использованием прописного написания символов.

 return 0;

}

void stringupper(char *str)

{

 while(*str) {

  *str = toupper(*str); // Получаем прописной эквивалент одного символа.

  str++; // Переходим к следующему символу.

 }

}

Результаты выполнения этой программы таковы.

МНЕ НРАВИТСЯ C++

Обратите внимание на то, что параметр str функции stringupper() объявляется с использованием типа char*. Это позволяет получить указатель на символьный массив, который содержит строку.

Рассмотрим еще один пример передачи строки функции. Как вы узнали в главе 5, стандартная библиотечная функция strlen() возвращает длину строки. В следующей программе показан один из возможных вариантов реализации этой функции.

// Одна из версий функции strlen().

#include <iostream>

using namespace std;

int mystrlen(char *str);

int main()

{

 cout << "Длина строки ПРИВЕТ ВСЕМ равна: ";

 cout << mystrlen("ПРИВЕТ ВСЕМ");

 return 0;

}

// Нестандартная реализация функции strlen().

int mystrlen(char *str)

{

 int i;

 for(i=0; str[i]; i++); // Находим конец строки.

 return i;

}

Вот как выглядят результаты выполнения этой программы.

Длина строки ПРИВЕТ ВСЕМ равна: 11

В качестве упражнения вам стоило бы попытаться самостоятельно реализовать другие строковые функции, например strcpy() или strcat(). Этот тест позволит узнать, насколько хорошо вы освоили такие элементы языка C++, как массивы, строки и указатели.

Аргументы функции main(): argc и argv

Аргумент командной строки представляет собой информацию, задаваемую в командной строке после имени программы.

Иногда возникает необходимость передать информацию программе при ее запуске. Как правило, это реализуется путем передачи аргументов командной строки функции main(). Аргумент командной строки представляет собой информацию, указываемую в команде (командной строке), предназначенной для выполнения операционной системой, после имени программы. Например, С++-программы можно компилировать путем выполнения следующей команды,

cl prog_name

Здесь элемент prog_name — имя программы, которую мы хотим скомпилировать. Имя программы передается С++-компилятору в качестве аргумента командной строки.

В C++ для функции main() определено два встроенных, но необязательных параметра, argc и argv, которые получают свои значения от аргументов командной строки. В конкретной операционной среде могут поддерживаться и другие аргументы (такую информацию необходимо уточнить по документации, прилагаемой к вашему компилятору). Рассмотрим параметры argc и argv более подробно.

На заметку. Формально для имен параметров командной строки можно выбирать любые идентификаторы, однако имена argc и argv используются по соглашению уже в течение нескольких лет, и поэтому имеет смысл не прибегать к другим идентификаторам, чтобы любой программист, которому придется разбираться в вашей программе, смог быстро идентифицировать их как параметры командной строки.

Параметр argc имеет целочисленный тип и предназначен для хранения количества аргументов командной строки. Его значение всегда не меньше единицы, поскольку имя программы также является одним из учитываемых аргументов. Параметр argv представляет собой указатель на массив символьных указателей. Каждый указатель в массиве argv ссылается на строку, содержащую аргумент командной строки. Элемент argv[0] указывает на имя программы; элемент argv[1] — на первый аргумент, элемент argv[2] — на второй и т.д. Все аргументы командной строки передаются программе как строки, поэтому числовые аргументы необходимо преобразовать в программе в соответствующий внутренний формат.

Важно правильно объявить параметр argv. Обычно это делается так.

char *argv[];

Доступ к отдельным аргументам командной строки можно получить путем индексации массива argv. Как это сделать, показано в следующей программе. При ее выполнении на экран выводится приветствие ("Привет" ), а за ним — ваше имя, которое должно быть первым аргументом командной строки.

#include <iostream>

using namespace std;

int main(int argc, char *argv[])

{

 if(argc!=2) {

  cout << "Вы забыли ввести свое имя.\n";

  return 1;

 }

 cout << "Привет, " << argv[1] << '\n';

 return 0;

}

Предположим, что вас зовут Том и что вы назвали эту программу именем name. Тогда, если запустить эту программу, введя команду name Том, результат ее работы должен выглядеть так: Привет, Том. Например, вы работаете с диском А, и в ответ на приглашение на ввод команды должны ввести упомянутую выше команду и получить следующий результат.

A>name Том

Привет, Том

А>

Чтобы получить доступ к отдельному символу в одном из аргументов командной строки, при обращении к массиву argv добавьте второй индекс. Например, при выполнении приведенной ниже программы посимвольно отображаются все аргументы, с которыми она была вызвана.

/* Эта программа посимвольно выводит все аргументы командной строки, с которыми она была вызвана.

*/

#include <iostream>

using namespace std;

int main(int argc, char *argv[])

{

 int t, i;

 for(t=0; t<argc; ++t) {

  i = 0;

  while(argv[t][i]) {

   cout << argv[t][i];

   ++i;

  }

  cout << ' ';

 }

 return 0;

}

Нетрудно догадаться, что первый индекс массива argv позволяет получить доступ к соответствующему аргументу командной строки, а второй — к конкретному символу этого строкового аргумента.

Обычно аргументы argc и argv используются для ввода в программу начальных параметров, исходных значений, имен файлов или вариантов (режимов) работы программы. В C++ можно ввести столько аргументов командной строки, сколько допускает операционная система. Использование аргументов командной строки придает программе профессиональный вид и позволяет использовать ее в командном файле (исполняемом текстовом файле, содержащем одну или несколько команд).

Соседние файлы в папке lekcii_1_10