Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
тех прог.doc
Скачиваний:
38
Добавлен:
14.11.2019
Размер:
3.59 Mб
Скачать

Программа 31. Эхо аргументов командной строки

Программа Echo трактует argv как массив символьных указателей.

// Файл Echo.cpp

#include <iostream.h>

#include <conio.h>

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

{

int i;

for(i = 1; i < argc; i++) // Перебор аргументов командной строки

cout << argv[i] << (i < argc - 1 ? " " : "\n");

getch();

return 0;

}

Выражение i < argc – 1 ?" " : "\n" равно строке из одного пробела либо строке из одного символа новая строка, когда i равен номеру последнего аргумента. Это обеспечивает вывод пробела между аргументами и переход на новую строку после вывода последнего аргумента.

Программа 32. Печать строк, содержащих образец

Программа определяет те вводимые строки, которые содержат образец, заданный в командной строке.

В программе использована библиотечная функция:

char* strstr(char* s1, char* s2);

которая проверяет, входит ли строка s2 в строку s1, и возвращает указатель на тот символ строки s1, с которого начинается строка s2. Если строка s1 не содержит строки s2, то функция возвращает NULL. Прототип этой функции содержится в файле string.h.

// Файл PrnExmpl.cpp

// Печать строк из файла, содержащих образец

// Файл и образец задаются в командной строке

#include <fstream.h>

#include <string.h>

#include <stdlib.h>

#include <conio.h>

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

{

const int MAXLINE = 1000; // Максимальная длина строки

char line[MAXLINE]; // Место для строк

char* name_progr = argv[0]; // Запоминаем имя программы

ifstream fin; // Входной файловый поток

if(argc < 3) // Если аргументов в командной строке не хватает

cout << "Используйте командную строку: \n"

<< name_progr << " file образец\n";

else{

fin.open(argv[1]); // Файл открывается на чтение

if(!fin){ // Если не удалось открыть файл

cerr << "Файл " << argv[1] << " Не найден \n";

exit(1);

}

while(!fin.eof()){ // Пока не достигнут конец файла,

fin.getline(line, MAXLINE); // читается строка

if(strstr(line, argv[2]) != NULL) // Если образец есть

cout << line << '\n'; // Печать строки

} // while

} // else

getch();

return 0;

}

Исходный текст данной программы находится в файле PrnExmpl.cpp, рабочая программа – в файле PrnExmpl.exe. Оба файла находятся в одном каталоге. Выполнение командной строки:

…> PrnExmpl.exe

приводит к появлению на экране следующих строк:

Используйте командную строку:

…\PrnExmpl.exe file образец

Зададим в качестве исходного файл PrnExmpl.cpp, содержащий исходный текст рассматриваемой программы, а в качестве образца строку из двух символов ”<<”, то есть выполним командную строку:

…> PrnExmpl.exe PrnExmpl.cpp <<

На экране появилось:

cout << "Используйте командную строку: \n"

<< name_progr << " file образец\n";

cerr << "Файл " << argv[1] << " Не найден \n";

cout << line << '\n'; // Печать строки

Программа вывела на экран те строки файла PnExmpl.cpp, которые содержат в качестве подстроки образец ”<<”.

При запуске программы из интегрированной среды TC можно задать аргументы командной строки в диалоговом окне Program Arguments, вызываемом командой меню Run, Arguments. При этом в число аргументов не включается имя самой программы.

В C++ Builder есть аналогичная команда Run, Parameters, открывающая диалог Run Parameters, рис.51, на котором в поле Parameters вводятся аргументы командной строки.

Рис.51 Задание параметров командной строки в C++ Builder

Из интегрированной среды нельзя перенаправить стандартный ввод и вывод на файл, задав в качестве параметра командной строки файл для чтения в виде <ИмяФайла, так как такое перенаправление осуществляется операционной системой и, чтобы им воспользоваться, нужно работать непосредственно с командной строкой в среде ОС. Интегрированная же среда интерпретирует указание <ИмяФайла как обычный параметр командной строки, который следует передать для обработки функции main.