Задача 1.24

Напишите программу, которая читает несколько транзакций. Для каждой вновь прочитанной транзакции необходимо выяснить, соответствует ли ее ISBN предыдущей транзакции. Программа должна подсчитать количество транзакций для каждого ISBN. Проверьте программу, введя несколько транзакций. Continue Reading «Задача 1.24»

Определение длины строки C++

Задача определения длины строки ( в этой статье под понятием строки  мы подразумеваем массив символов char * ) в C++ решается достаточно просто:

Это относительно простой способ вычисления длины строки. Но эта статья не для того пишется, чтобы рассказать о замечательной функции strlen(), а для того, чтобы объяснить как вычислить длину строки, не прибегая к ней и не подключая заголовочный файл string.h

Continue Reading «Определение длины строки C++»

Задача со светофором на C++

Ответы mail.ru — штука глючная. Пытался ответить там на вопрос. Не дает вставлять код. Размещаюсь здесь.

Задача

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

Язык С++.

Желательно решить простым способом (уровень новичка) . Да, и еще нужно использовать функции ввода и вывода scanf и printf, а не cin и cout.

Решение

Простые типы данных

Тип Значение Минимальный размер Максимальный размер
bool Логический тип (boolean) не определен не определен
char Символ 8 битов -128 до 127 (unsigned 0 до 255)
wchar_t Символ Unicode 16 битов
short Короткое целое число 16 битов -32768 до 32767 (unsigned 0 до 65535)
int Целое число 16 битов -2147483648 до 2147483647 (unsigned 0 до 4294967259)
long Длинное целое число 32 битов -2147483648 до 2147483647 (unsigned 0 до 4294967259)
float Число с плавающей запятой одинарной точности 6 значащих цифр 3.4Е-38 до 3.4Е+38
double Число с плавающей запятой двойной точности 10 значащих цифр 1.7Е-308 до 1.7Е+308
long double Число с плавающей запятой повышенной точности 10 значащих цифр 1.7Е-308 до 1.7Е+308

Строки C++: преобразование строки в число.

Еще одна задача, которая часто встречается на форумах — это вопрос по преобразованию строки в число. И не важно какого типа число: int, float, или другого. Важен сам факт преобразования, сама технология.

На самом деле если особо не забивать голову замарочками, типа «функция atoi не всегда работает корректно (что я проверил на практике, но не искал причины)», то вопрос решается очень легко.

Чтоб не тянуть я сразу приведу 2 функции преобразования строки в число типа int. Вы можете просто изменить тип данных и получите float, double…

Для начала нужно подключить заголовочный файл sstream

….

….

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

Строки C++: поиск подстроки в строке на cpp

К сожалению во все времена камнем преткновения для многих начинающих c++ программистов была работа со строками. Была, есть и, даже после чтения десятков статей подобного содержания, будет.

В данном посте я рассматриваю вопрос поиска подстроки в строке. Данный вопрос миллионы раз рассматривался, обсуждался и «переваривался» на форумах, сайтах, блогах, на русском, английском, французском (…) языках людьми всех возрастов, вероисповеданий, расс… Я тоже хочу ответить на вопрос: «как найти подстроку в строке

В данном случае мы рассмотрим самый простой вариант — это поиск подстроки в строке типа string. Здесь задача решается одной функцией в 14 строк. Сразу приведу функцию, которую я накидал:

Рассмотрим каждый момент отдельно.

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

Первым же делом ищем вхождение подстроки в строку. Результат — позиция первого символа подстроки в строке. Т. к. искать начинаем с начала строки, то значение start = 0.

Итак, если мы нашли хот одно вхождение, то увеличиваем позицию для начала старта. Приведенная мною формула экономит процессорное время, т.к. пропускает найденную подстроку, и программа в этой части поиск уже не производит.

Также мы увеличиваем значение счетчика. И всё! В конце выводим значение счетчика.

В следующем посте я приведу НЕСКОЛЬКО быстрых алгоритмов поиска подстроки в строках типа char*.

Boost split — разбиваем строку

Никогда не приходилось писать на C++. Но тут решил поэкспериментировать. Задача №1 — написать программу, которая будет напрямую обращаться к postfix. Не буду писать, зачем мне это нужно. Я думаю всем и так понятно (о спаме речи быть не может. просто большое количество писем). Так как я это уже реализовывал на C++, то мне нужно было лишь немного изменить код и программа готова. Но вот проклятие всех программистов на C — работа со строками. То, что на php или Java со строкой можно сделать, приложив минимум усилий, то же самое на Си требует десятки строк кода, а иногда и создания целых библиотек классов 🙂

На этом и уткнулся я со своей задачей №2 — выгруженный в csv файл список клиентов разбить по полям ИМЯ-ФАМИЛИЯ-ОТЧЕСТВО-EMAIL.

Проделав множество махинаций с кодом на языке, который и без того я считал очень сложным, убедился в том, что C++ так просто мне не поддастся. Пришлось идти на хитрость. Поискав в интернете ответ на мой вопрос только на 4 странице поисковика я вышел на рабочий пример разбивки строки по определенному делителю. Как оказалость, данный функционал давно реализован в Boost.

Достаточно предисловия… перейдем сразу к делу. Необходимая нам функция описана в файле


Шаблон

А вот готовый рабочий пример:

Надеюсь приведенный пример поможет многим сэкономить время.