Аналог strings в windows

Обновлено: 05.07.2024

2. Какие модули (библиотеки) нужно подключить, чтобы использовать возможности класса string в MS Visual Studio C++?

Чтобы использовать возможности класса string в MS Visual Studio (C++), нужно подключить библиотеку <string> и пространство имен std .

3. Каким образом осуществляется объявление переменной типа string ? Примеры

Объявление переменной типа string осуществляется точно так же как и обычной переменной. Возможный вариант объявления с одновременной инициализацией.

4. Какие преимущества и недостатки дает использование класса string в сравнении с типом char* ?

Создание нового типа string было обусловлено недостатками работы с строками символов, который демонстрировал тип char* . В сравнении с типом char* тип string имеет следующие основные преимущества:

  • возможность обработки строк стандартными операторами C++ ( = , + , = = , <> и т.п.). Как известно, при использовании типа char* даже наиболее простые операции со строками выглядели сложно и требовали написания чрезмерного программного кода;
  • обеспечение лучшей надежности (безопасности) программного кода. Например, при копировании строк, тип string обеспечивает соответствующие действия, которые могут возникнуть в случае, если строка-источник имеет больший размер чем строка-приемник;
  • обеспечение строки, как самостоятельного типа данных. Объявление типа string как строки есть единым для всех переменных в программе, которая обеспечивает непротиворечивость данных.

Основным недостатком типа string в сравнении с типом char* , есть замедленная скорость обработки данных. Это связано с тем, что тип string – это, фактически, контейнерный класс. А работа с классом требует дополнительной реализации программного кода, который, в свою очередь занимает лишнее время.

5. Какие операторы можно использовать с объектами класса string ?

Класс string есть удобен тем, что позволяет удобно манипулировать строками, используя стандартные (перегруженные) операторы.

С объектами класса string можно использовать нижеследующие операторы

Пример, который демонстрирует использование вышеприведенных операторов

6. Содержит ли класс string конструкторы?

Как и любой класс, класс string имеет ряд конструкторов. Основные из них следующие:

7. Примеры инициализации с помощью конструкторов

Ниже приведены примеры инициализации переменных типа string

8. Присваивание строк. Функция assign() . Примеры

Чтобы присвоить одну строку другой, можно применить один из двух методов:

Функция assign() имеет несколько перегруженных реализаций.

Первый вариант – это вызов функции без параметров

В этом случае происходит простое присваивание одной строки другой.

Второй вариант позволяет копировать заданное количество символов из строки:

  • s – объект, из которого берется исходная строка;
  • st – индекс (позиция) в строке, из которой начинается копирование num символов;
  • num – количество символов, которые нужно скопировать из позиции st ;
  • size_type – порядковый тип данных.

Третий вариант функции assign() копирует в вызывающий объект первые num символов строки s :

Ниже приведен пример с разными реализациями функции assign() .

Пример.

9. Объединение строк. Функция append() . Пример

Однако, функция append() хорошо подходит, если нужно добавлять часть строки.

Функция имеет следующие варианты реализации:

Пример. Демонстрация работы функции append() .

10. Вставка символов в строке. Функция insert() . Пример

Чтобы вставить одну строку в заданную позицию другой строки нужно использовать функцию insert() , которая имеет несколько вариантов реализации.

Первый вариант функции позволяет вставить полностью всю строку s в заданную позицию start вызывающей строки (вызывающего объекта):

Второй вариант функции позволяет вставить часть (параметры insStart , num ) строки s в заданную позицию start вызывающей строки:

В вышеприведенных функциях:

  • s – строка, которая вставляется в вызывающую строку;
  • start – позиция в вызывающей строке, из которой осуществляется вставка строки s ;
  • insStart – позиция в строке s , из которой происходит вставка;
  • num – количество символов в строке s , которые вставляются с позиции insStart .
11. Замена символов в строке. Функция replace() . Пример

Функция replace() выполняет замену символов в вызывающей строке. Функция имеет следующие варианты реализации:

В первом варианте реализации вызывающая строка заменяется строкой s . Есть возможность задать позицию ( start ) и количество символов ( num ) в вызывающей строке, которые нужно заменить строкой s .

Второй вариант функции replace() отличается от первого тем, что позволяет заменять вызывающую строку только частью строки s . В этом случае задаются два дополнительных параметра: позиция replStart и количество символов в строке s , которые образуют подстроку, которая заменяет вызывающую строку.

Пример. Демонстрация работы функции replace() .

12. Удаление заданного количества символов из строки. Функция erase() . Пример

Для удаления символов из вызывающей строки используется функция erase() :

  • index – индекс (позиция), начиная из которой нужно удалить символы в вызывающей строке;
  • num – количество символов, которые удаляются.

Пример.

13. Поиск символа в строке. Функции find() и rfind() . Примеры

В классе string поиск строки в подстроке можно делать двумя способами, которые отличаются направлением поиска:

  • путем просмотра строки от начала до конца с помощью функции find() ;
  • путем просмотра строки от конца к началу функцией rfind() .

Прототип функции find() имеет вид:

  • s – подстрока, которая ищется в строке, что вызывает данную функцию. Функция осуществляет поиск первого вхождения строки s . Если подстрока s найдена в строке, что вызвала данную функцию, тогда возвращается позиция первого вхождения. В противном случае возвращается -1;
  • start – позиция, из которой осуществляется поиск.

Прототип функции rfind() имеет вид:

  • s – подстрока, которая ищется в вызывающей строке. Поиск подстроки в строке осуществляется от конца к началу. Если подстрока s найдена в вызывающей строке, то функция возвращает позицию первого вхождения. В противном случае функция возвращает -1;
  • npos – позиция последнего символа вызывающей строки;
  • start – позиция, из которой осуществляется поиск.

Пример 1. Фрагмент кода, который демонстрирует результат работы функции find()

Пример 2. Демонстрация работы функции rfind() .

14. Сравнение частей строк. Функция compare() . Пример

Но если нужно сравнить часть одной строки с другой, то для этого предусмотрена функция compare() .

Прототип функции compare() :

  • s – строка, которая сравнивается с вызывающей строкой;
  • start – позиция (индекс) в строке s , из которой начинается просмотр символов строки для сравнения;
  • num – количество символов в строке s , которые сравниваются с вызывающей строкой.

Функция работает следующим образом. Если вызывающая строка меньше строки s , то функция возвращает -1 (отрицательное значение). Если вызывающая строка больше строки s , функция возвращает 1 (положительное значение). Если две строки равны, функция возвращает 0.

Пример. Демонстрация работы функции compare() :

Функция объявлена с модификатором const . Это означает, что функция не может изменять вызывающий объект (строку).

Пример 1. Преобразование типа string в const char * .

Пример 2.

Ниже продемонстрирован перевод строки из string в тип System::String для отображения его в элементе управления типа Label для приложений типа Windows Forms Application .

16. Как определить длину строки типа string ? Функция length()

Для определения количества символов в строке используется функция length() без параметров.

Будем честны — стандартная командная строка Windows неудобна. В ней нет нормального copy-paste, нет вкладок и даже нет возможности по-человечески поменять размер окна. Кроме того, в самой Windows маловато консольных инструментов, и любители текстового режима, возможно, захотят получить доступ к мощному окружению UNIX. Для этого тоже есть свои решения.

Microsoft не сильно заботит судьба командной строки. Оно и понятно: для большинства людей это совершенно бесполезная часть системы. К счастью, есть энтузиасты, не поленившиеся превратить стандартный cmd.exe в инструмент, который действительно можно использовать.

Console

Console - бесплатная и продуманная до мелочей альтернатива родной консоли

Console - бесплатная и продуманная до мелочей альтернатива родной консоли

Сперва рассмотрим решения для тех, кто выживает под командной строкой Windows, но при этом не испытывает нужды связываться с виртуализацией или *nix-утилитами, а главное — не желает платить! Словом, начнем с самого простого и доступного.

Проект с незамысловатым названием Console, пожалуй, самая крутая и функциональная разработка для оптимизации cmd в Windows на данный момент. В отличие от родной оболочки системы Console призвана быть удобной, понятной и предусматривает все те мелочи, которых многим так не хватает, например, после работы с Linux или Mac.

Нагляднее всего будет просто перечислить ключевые фишки софтины:

  • Можно создавать множество вкладок командной строки в одном окне, с индикацией активности фоновой вкладки.
  • Можно на лету изменять размер окна, как хочется, текст будет автоматически подгоняться под новый размер.
  • Имеется функция copy-paste, а значит, можно спокойно копипастить информацию туда-сюда, как в обычном текстовом редакторе (выделить мышью нужный фрагмент можно, зажав клавишу , а вставить — через тулбар или через меню).
  • Есть возможность выбирать любой из доступных для консоли шрифтов и настроить их сглаживание вплоть до ClearType.
  • Можно запоминать размер окна и позицию на экране — при каждом запуске конфигурация будет та, что нужна пользователю. Прозрачность окна также имеется и настраивается, но реализована странно — во многих случаях текст становится нечитаемым.
  • Работают всевозможные комбинации клавиш, которые можно настроить под себя.
  • Можно создавать преднастроенные вкладки и прописывать комбинации команд, которые будут выполнены при открытии данной вкладки.
  • Есть возможность подключения других интерпретаторов (bash и прочие) — а значит, и запускать сценарии на этих языках.

Разумеется, это далеко не полный перечень того, что умеет Console, но остальные нюансы лучше познавать на деле, тем более что программа распространяется свободно и совершенно бесплатно. Заметим, что, поработав с Console хотя бы раз, уже сложно представить себе работу без нее. К сожалению, некоторые пользователи жалуются на скорость работы программы.

  • Сильная сторона — возможность располагать консоли не только в виде вкладок, но и в виде областей одного экрана. При этом можно разместить до четырех терминалов.
  • Можно вести логи вводимых команд, искать по ним.
  • Можно запоминать пути и папки в виде избранного с занесением в избранные закладки.
  • Предусмотрены различные настройки интерфейса: меняется фон, изменяются шрифты, нумеруются строки.
  • Поддерживается автодополнение.
  • Доступна подсветка синтаксиса.
  • Есть возможность запоминать активные сессии.

Однозначно оправдать ценник в 30 долларов у PowerCmd мы не можем — при желании Console можно расширить до нужного уровня, да и упирается все в конечном счете в конкретные потребности пользователя. Однако по сравнению с бесплатным аналогом этот инструмент более нагляден, интерактивен и удобен — мы считаем, что он лучше подойдет тем, кто не хочет ковыряться в форумах и настройках для того, чтобы «допилить» Console. Но это наше мнение, и сформировать собственное ты сможешь, если попробуешь бесплатную триальную версию PowerCmd. Также на нее стоит обратить внимание пользователям, часто работающим с русскими названиями файлов, — с ними PowerCmd часто ведет себя непредсказуемо.

По сравнению с Console, PowerCmd имеет множество дополнительных плюшек

По сравнению с Console, PowerCmd имеет множество дополнительных плюшек

Clink

К самым простым апгрейдам можно отнести еще один совсем маленький lifehack — Open Source утилиту clink, которая способна значительно расширить возможности интерпретатора командной строки cmd.exe. Дело в том, что clink использует библиотеку readline, которая создана и поддерживается в рамках проекта GNU и обеспечивает интерфейс командной строки и обработку строк в bash.

После установки clink интерпретатор cmd.exe фактически ведет себя как командная оболочка bash со всеми ее продвинутыми функциями: автодополнением командной строки, редактированием, историей команд и так далее. Перечислять весь список новых возможностей cmd не стану, приведу только некоторые особенности:

  • удобное автодополнение путей (TAB);
  • вставка из буфера обмена (Ctrl-V);
  • поддержка автодополнения при указании исполняемых файлов/команд и переменных окружения;
  • функции Undo/Redo (Ctrl-_ или Ctrl-X, Ctrl-U);
  • улучшенная история командной строки;
  • сохранение предыдущих сессий;
  • поиск по истории (Ctrl-R и Ctrl-S);
  • расширенная история (например, . !<string< и !$);
  • скрипты автодополнения на Lua, позволяющие серьезно сэкономить время.

Cygwin

Cygwin с запущенным xclock и Midnight Commander

Cygwin с запущенным xclock и Midnight Commander

Ну и в заключение хотелось бы напомнить тебе о еще одном полезнейшем инструменте, хотя его и нельзя назвать «простой оптимизацией cmd». Данное решение пригодится тем, кто желает объединить возможности Linux и Windows, или тем, кто по каким-то причинам не может установить Linux на своем компе, но в нем нуждается.

Конечно, большинство наших читателей уже догадались, о чем речь, ведь они наверняка знакомы со старым добрым Cygwin, но вспомнить о нем еще раз — не лишнее.

Cygwin — это UNIX-подобная среда и интерфейс командной строки для Windows, позволяющая объединить Windows и UNIX без использования виртуализации (что немаловажно). По сути, это не что иное, как набор утилит из мира *nix, портированных на Windows. Что конкретно устанавливать помимо базовой системы, каждый решает сам для себя — выбор огромен. Но так как мы сегодня занимаемся оптимизацией командной строки, нас интересует именно этот аспект Cygwin.

В общем-то, Cygwin превращает командную строку в удобный UNIX-терминал, к какому привыкли поклонники Linux и Mac. Все UNIX-команды, которые тебе знакомы, прекрасным образом будут работать и здесь, так же, как работают и многие никсовые утилиты. Однако сама командная оболочка, увы, остается практически без изменений. Cygwin решает проблему отсутствия команд и синтаксиса, но удобство работы все равно оставляет желать лучшего. Следующий совет поможет разобраться и с этой задачей.

Mintty

mintty — удобная надстройка

mintty — удобная надстройка

Если ты используешь Cygwin или MSYS/MinGW, тебе точно пригодится mintty.

Как мы уже выяснили, чаще всего людям в работе с командной строкой не хватает самого элементарного: удобного выделения текста, функции copy-paste, настроек прозрачности окна и так далее. А значит, нужна новая программа-терминал. Mintty — одно из самых популярных и удобных решений в этой области.

Mintty, так же как и Console, о которой речь шла в начале, призвана оптимизировать работу командной строки. Функциональность этих двух софтин весьма схожа, правда, mintty, к сожалению, не поддерживает табы. Если же наличие или отсутствие вкладок некритично, на mintty точно стоит обратить внимание, потому что она предоставляет:

Аналоги распространенных Unix инструментов в PowerShell

При переходе с bash на PowerShell часто возникают неудобства, связанные с незнанием, какие есть аналоги в PowerShell и как ими пользоваться. К примеру, лично мне очень нравится bash своей логикой. Вот нужно вам из текстового файла найти только что-то определенное, и вы знаете, что для этого нужно задействовать, скажем, cat и grep. А вот при написании подобного на PowerShell часто возникает полный ступор. И вроде вся логика понятна, и скрипт-то в одну строку, а как реализовать — неясно. Именно с этим и предлагаю разобраться в сегодняшней статье.

Про общий синтаксис и основы языка PowerShell написано немало, есть огромное количество литературы, статей и видео на данную тему. Те же циклы и счетчики описаны уже не по одному десятку раз, поэтому в данной статье о них ничего не рассказано. Если вдруг про PowerShell вы узнали совсем недавно, то есть смысл обратиться в поисковую систему с банальным запросом вида «powershell tutorial for beginners pdf».

Общие правила в PowerShell

Сперва давайте разберемся с наиболее простым, но не менее важным — с тем, как работать с переменными. Скажем, если в bash для объявления переменной достаточно написать foo=1 , то для PowerShell нужно добавить знак доллара — $foo=1 . Для вывода значения переменной на экран можно воспользоваться универсальным echo или, если работаешь с пошиком, командлетом Write-Host . Длиннее? Да, безусловно, но при этом с помощью данного командлета можно весьма интересно управлять выводом:

Write - Host ( 2 , 4 , 6 , 8 , 10 , 12 ) - Separator "->" - ForegroundColor DarkMagenta - BackgroundColor White

К примеру, данный код выведет последовательность цифр в скобках, между цифрами поставит знак -> плюс раскрасит бэкграунд и сам текст. Конечно, для скрипта на коленке это не нужно, но вот для каждодневного отчета почему бы и нет.

Аналоги Unix bash инструментов в PowerShell

Пример работы командлета Write-Host

Нужно что-либо сравнить? Для этого есть целая таблица, которая так или иначе знакома любому линуксоиду:

Всё о PowerShell в Windows и на Linux. Системное администрирование Windows

В PowerShell не обязательно использовать echo или аналогичные команды, поскольку по умолчанию поведением для строк является их вывод.

К примеру если ввести число и нажать Enter, то оно будет выведено на экран:

Если ввести строку в двойных кавычках и нажать Enter, то она также будет выведена на экран:

Аналогично для строк в одинарных кавычках:


Тем не менее, если ввести строку без кавычек (как число), то это вызовет ошибку

Аналогично со строками, которые начинаются на числа — их нужно заключать в кавычки. Разница в поведении, видимо, связана с тем, что имена функций и командлетов не могу составлять только из чисел, поэтому числа трактуются буквально, а все другие строки трактуются как имена командлетов, если они не заключены в кавычки.

Аналогично вывод содержимого переменных не требует echo или других командлетов:


И при этом в PowerShell имеется поддержка команды echo:


А также есть командлеты для вывода информации:

Можно запутаться, правда?

Для начала уясним, что echo является синонимом Write-Output.

Командлет Write-Information предназначен для вывода обработчиков потоков информации и является сложным по сравнению с обычной функцией echo — его мы рассматривать не будем.

Итак, изучим Write-Host и Write-Output.

Особенности echo в PowerShell

Прежде всего, обратите внимание на разницу в выводе строке, содержащей пробелы, в кавычках и без:


Как уже было сказано, echo является псевдонимом для Write-Output, поэтому рассмотрим этот командлет подробнее, чтобы понять другие особенности echo в PowerShell.

Write-Output

Командлет Write-Output отправляет указанный объект по конвейеру следующей команде. Если команда является последней командой в конвейере, объект отображается в консоли.

Этот командлет обычно используется в сценариях для отображения строк и других объектов на консоли. Однако, поскольку поведение по умолчанию заключается в отображении объектов в конце конвейера, обычно нет необходимости использовать командлет. Например,

Итак, одной из особенностей echo и Write-Output является то, что эти команды не требуются.

Другая особенность — эти команды работают с объектами, поэтому простая строка с запятыми может быть выведена не так, как вы ожидаете.

К примеру, команда


Дело в том, что эти строки расцениваются как объекты, свойства которых перечислены через запятую и каждое новое свойство выводится на отдельной строке. Если вы хотите избежать такого поведения, то просто помещайте строку в одинарные или двойные кавычки.

Пример 1: Получение объекта и вывод его в консоль

Первая команда получает список процессов, запущенных на компьютере, и сохраняет их в переменной $P.

Вторая команда отображает объекты процесса в $P на консоли.

Пример 2: Передача вывода другому командлету

Эта команда передаёт строку «test output» командлету Get-Member, который отображает члены класса System.String, демонстрируя, что строка была передана по конвейеру.

Пример 3: Подавление перечисления в выводе

Эта команда добавляет параметр -NoEnumerate для обработки коллекции или массива как одного объекта в конвейере.

Write-Host

Командлет Write-Host является продвинутым аналогом Write-Output.

Командлет Write-Host настраивает вывод. Вы можете указать цвет текста, используя параметр -ForegroundColor, и вы можете указать цвет фона, используя параметр -BackgroundColor. Параметр -Separator позволяет указать строку (символ или набор символов), которая будет использоваться для разделения отображаемых объектов. Конкретный результат зависит от программы, в которой размещается PowerShell.

Начиная с Windows PowerShell 5.0, «Write-Host» является оболочкой для «Write-Information». Это позволяет вам использовать «Write-Host» для отправки вывода в информационный поток. Это позволяет захват или подавление данных, записанных с помощью Write-Host, при сохранении обратной совместимости

Опции Write-Host

-BackgroundColor

Падает цвет фона. По умолчанию значение не установлено. Допустимые значения для этого параметра:

-ForegroundColor

Задает цвет текста. По умолчанию значение не установлено. Допустимые значения для этого параметра:

-NoNewline

Параметр делает так, что строковые представления входных объектов объединяются для формирования выходных данных. Между строками вывода не вставляются пробелы или символы новой строки. Новая строка не добавляется после последней выходной строки.

-Separator

Падает разделительную строку для вставки между объектами, отображаемыми хостом.

Write-Host отправляет объекты на хост. Сам командлет не возвращает никаких объектов. Однако хост может отображать объекты, которые посылает ему Write-Host.

Примеры Write-Host

Пример 1: Запись в консоль без добавления символа новой строки:


Эта команда отображает строку «no newline test» с параметром -NoNewline.

Затем записывается вторая строка, но она оказывается на той же строке, что и первая, из-за отсутствия символа новой строки, разделяющей строки.

Сравните с поведением по умолчанию:

Пример 2: Запись в консоль и замена стандартного разделителя

Эта команда отображает чётные числа от двух до двенадцати. Параметр -Separator используется для добавления строки «, +2= » (запятая, пробел, +, 2, =, пробел)`.

Пример 3: Вывод с другим цветом текста и фона


Эта команда отображает чётные числа от двух до двенадцати. Она использует параметр -ForegroundColor для вывода темно-зеленого текста и параметр -BackgroundColor для отображения белого фона.

Пример 4: Вывод с разными цветами текста и фона


Эта команда отображает строку «Red on white text». Текст имеет красный цвет, как определено параметром -ForegroundColor. Фон является белым, как определено параметром -BackgroundColor.

Пример 5: Подавление вывода от Write-Host

Эти команды эффективно подавляют вывод командлета Write-Host. Первый использует параметр -InformationAction со значением «Ignore» для подавления вывода в информационный поток. Второй пример перенаправляет информационный поток команды в переменную «$null» и тем самым подавляет его.

Подавление вывода echo и Write-Output

Для подавления вывода echo и Write-Output используется одинаковая конструкция:

Подавление стандартного вывода

Стандартный вывод могут показывать не только echo и Write-Output. Поэтому конструкция «> $null» может работать не всегда.

Как было показано выше, иногда информационный поток имеет другой номер, например:

Заключение

Итак, для вывода в консоль можно использовать следующие команды:

  • Write-Output
  • echo (псевдоним Write-Output)
  • Write-Information (вывод с возможностью поменять текст цвета и фона).

Ещё парочка примеров применения вывода в консоль. Следующая команда покажет строку «Current user: », а затем на этой же строке выведет результат работы команды «whoami»:


В следующем пример содержимое файла записывается в переменную, затем значение переменной выводится в консоль:

Читайте также: