С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
3 / 3 / 2
Регистрация: 05.01.2013
Сообщений: 264

C++ и базовые функции PHP

20.09.2014, 20:16. Показов 1977. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Когда-то давно кодил на с++, но то было около 10 лет назад. С тех пор уже все забыл, да и многое поменялось, но вот решил вспомнить навыки работы с нормальным языком.
Таки в процессе написания первой программы, возник неминуемый вопрос:
А есть ли вообще в С++ какие-нибудь библиотеки, которые частично реализуют базовые функции PHP? Простой пример:
Чтобы считать построчно данные из файла в массив и обрезать по краям пробелы и символы перевода строки, нужно написать следующее:
PHP
1
2
$array = file( "filename" );
$array = array_map("trim", $array);
Все крайне просто, как можно заметить. В сях же я не знаю, как оно реализуется и какие библиотеки, облегчающие оное существуют.
Не писать же их самому? В голову, например, приходит реализация с помощью регулярных выражений, если таковые имеются в с++, но все равно громоздко и лишне.
Погуглив, я обнаружил, что даже с C# есть такое:
C#
1
string[] lines = File.ReadAllLines("config.ini");
Может, ну его нафиг тогда с++, а лучше начать сразу учить с#? Что там сейчас актуально? Или, может, яву?

Добавлено через 1 час 11 минут
Как я понял, чтобы значительно облегчить себе жизнь, нужно обязательно установить огромную библиотеку boost и разбираться в ней до посинения, ибо она содержит многое из того, что нужно каждому программисту. В то же время C# уже имеет оные функции. Подскажите все же. Стоит ли вспоминать С++ или сразу начать C#?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.09.2014, 20:16
Ответы с готовыми решениями:

Базовые функции Лиспа
А что относится к базовым функциям LISPa?

Напишите функции, имитирующие базовые
1. Напишите функцию, имитирующую базовую функцию (а) CAR; (б)¬CDR с использованием функции, возвращающей последний элемент ...

Используя базовые элементарные структуры, составьте алгоритм нахождения значений функции
(Ссылка на сторонний ресурс удалена)

14
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
20.09.2014, 21:49
Цитата Сообщение от PhpNewbie Посмотреть сообщение
Чтобы считать построчно данные из файла в массив
Что за данные?
Цитата Сообщение от PhpNewbie Посмотреть сообщение
Что там сейчас актуально?
Люди с мозгами, как и всегда.
Цитата Сообщение от PhpNewbie Посмотреть сообщение
чтобы значительно облегчить себе жизнь, нужно обязательно установить огромную библиотеку boost и разбираться в ней до посинения
Он (на самом деле это семейство библиотек) позволяет облегчить жизнь, но знать его не обязательно. Можно написать свои функции работы с датами, например, а можно взять готовое из него.
Буст не является стандартом, для использования языка не требуется.

Цитата Сообщение от PhpNewbie Посмотреть сообщение
Стоит ли вспоминать С++ или сразу начать C#?
Всё зависит от целей. Молоток выбирают чтобы вбивать гвозди, а не на авось. Инструментарий берут под задачу, а не наоборот. Вам конкретно что нужно?
0
3 / 3 / 2
Регистрация: 05.01.2013
Сообщений: 264
21.09.2014, 00:31  [ТС]
Что за данные?
Обычный текстовый файл, разделенный символами перевода строки \r\n.
Люди с мозгами, как и всегда.
Все равно главенствуют какие-то языки.
Он (на самом деле это семейство библиотек) позволяет облегчить жизнь, но знать его не обязательно. Можно написать свои функции работы с датами, например, а можно взять готовое из него.
Буст не является стандартом, для использования языка не требуется.
Это понятно, но, судя по всему, без него придется многое реализовывать самостоятельно. По крайней мере самое базовое, той же функции trim в C++ нету, но есть в бусте.
Всё зависит от целей. Молоток выбирают чтобы вбивать гвозди, а не на авось. Инструментарий берут под задачу, а не наоборот. Вам конкретно что нужно?
Да я сам не знаю. Чисто для опыта, но в целом пощупав сегодня с++ и сишарп, я все-таки больше проникся к последнему, особенно после пары лет кодинга на пхп. Все более просто, имеются полезные функции, легкая работы с данными. Единственный минус, кажется, библиотек меньше, чем на с++. Ну и скорость, но для меня это не важно.
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
21.09.2014, 00:54
Цитата Сообщение от PhpNewbie Посмотреть сообщение
Да я сам не знаю. Чисто для опыта, но в целом пощупав сегодня с++ и сишарп, я все-таки больше проникся к последнему, особенно после пары лет кодинга на пхп.
С++ - это настолько растяжимое понятие, что пощупать его быстро вряд ли удастся. У него очень много областей применения. Поэтому-то ты и не нашел сразу того, чего ищешь.
Если и сравнивать С++ с С#, то на примере какого-то фреймворка, т.к. в C# есть фреймворк .NET, в котором все эти вкусности присутствуют. Так что можно посмотреть в строну Qt, фреймворка для С++ все что нужно для работы там есть (в том числе и функция trim ).
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
21.09.2014, 00:59
Цитата Сообщение от DrOffset Посмотреть сообщение
Если и сравнивать С++ с С#, то на примере какого-то фреймворка, т.к. в C# есть фреймворк .NET, в котором все эти вкусности присутствуют.
.Net доступен и на C++/CLI .
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
21.09.2014, 01:03
Цитата Сообщение от S_el Посмотреть сообщение
.Net доступен и на C++/CLI .
Это да, только C++/CLI - это уже считай другой язык
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
21.09.2014, 01:07
Цитата Сообщение от DrOffset Посмотреть сообщение
Это да, только C++/CLI - это уже считай другой язык
Теперь уже да,если я не ошибаюсь,то он не совместим ни с 11 ни с 14 стандартом.
Да и синтаксис больше на шарповский похож(например доступ к элементам массива в виде [i,j],вместо [i][j]).
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
21.09.2014, 01:09
Цитата Сообщение от S_el Посмотреть сообщение
Теперь уже да,если я не ошибаюсь,то он не совместим ни с 11 ни с 14 стандартом.
Да он, собственно, и с 98 и 03 не совместим. Из-за некоторых особенностей синтаксиса.
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
21.09.2014, 01:12
Цитата Сообщение от DrOffset Посмотреть сообщение
Да он, собственно, и с 98 и 03 не совместим. Из-за некоторых особенностей синтаксиса.
Можете рассказать подробнее?Всегда думал,что C++/CLI - надстройка над обычным C++ и использовать в нём можно все возможности языка,с учетом особенностей накладываемых .NET
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
21.09.2014, 01:18
Цитата Сообщение от S_el Посмотреть сообщение
Можете рассказать подробнее?Всегда думал,что C++/CLI - надстройка над обычным C++ и использовать в нём можно все возможности языка,с учетом особенностей накладываемых .NET
Использовать-то можно, только это код там по умолчанию управляемый, а С++ - это натив.
Но речь не об этом. Я вообще говорил о том, что код на С++\CLI не перенести на другой компилятор из-за его особенностей. Совместимость же со стандартом в обе стороны должна быть, чтобы можно было считать это одним и тем же языком. С++ и С тоже много в чем совместимы, однако всегда есть код, который работает в С и не работает в С++, хотя кто-то тоже может считать С++ расширением языка С (изначально оно так и было, но давно).
1
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
21.09.2014, 01:20
Цитата Сообщение от DrOffset Посмотреть сообщение
Я вообще говорил о том, что код на С++\CLI не перенести на другой компилятор из-за его особенностей. Совместимость же со стандартом в обе стороны должна быть, чтобы можно было считать это одним и тем же языком.
Вот теперь все встало на свои места
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
21.09.2014, 14:24
Цитата Сообщение от PhpNewbie Посмотреть сообщение
Не писать же их самому?
Почему бы и нет? Написать это "абы как" можно за 10-15 минут. К примеру, навскидку, как-то так можно file реализовать (без учета флагов, мне лень)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
#include <vector>
#include <fstream>
#include <string>
 
std::vector<std::string> file(const char *filename)
{
    std::ifstream file(filename);
    std::vector<std::string> lines;
    std::string line;
    if (!file.is_open())
    {
        std::cerr << "Error: cannot open file '" << filename << "'" << std::endl;
        exit(EXIT_FAILURE);
    }
 
    while (std::getline(file, line))
        lines.push_back(line);
    return lines;
}
 
 
int main(int argc, char *argv[])
{
    std::vector<std::string> arr = file("./1.txt");
 
    for (std::vector<std::string>::const_iterator it = arr.begin(); it != arr.end(); ++it)
        std::cout << *it << std::endl;
    //....
 
    std::cin.get();
}
А вот так, например, можно array_map реализовать..
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#include <iostream>
#include <algorithm>
#include <string>
#include <map>
#include <vector>
 
typedef std::string  (*Functions_t) (std::string);
std::map<std::string, Functions_t> function_list;
 
template<typename T>
class Array
{
    std::vector<T> arr;
 
public:
    void add(T el)
    {
        arr.push_back(el);
    }
    T& operator[](std::size_t index)
    {
        if (index >= arr.size())
        {
            std::cerr << "Error: Out of range " << std::endl;
            system("pause");
            exit(EXIT_FAILURE);
        }
        return arr[index];
    }
    std::size_t size()
    {
        return arr.size();
    }
};
 
template<typename T>
Array<T> array_map(std::string function_name, Array<T> arr)
{
    std::map<std::string, Functions_t>::const_iterator function = function_list.find(function_name);
    if (function == function_list.end())
    {
        std::cerr << "Error: undefined function '" << function_name << "'." << std::endl;
        system("pause");
        exit(EXIT_FAILURE);
    }
 
    for (std::size_t i = 0; i < arr.size(); ++i)
        arr[i] = function->second(arr[i]);
 
    return arr;
}
 
std::string trim(std::string str)
{
    str.erase(0, str.find_first_not_of(' '));       //prefixing spaces
    str.erase(str.find_last_not_of(' ') + 1);         //surfixing spaces
    return str;
}
std::string reverseString(std::string str)
{
    std::reverse(str.begin(), str.end());
    return str;
}
std::string upperCase(std::string str)
{
    std::transform(str.begin(), str.end(), str.begin(), ::toupper);
    return str;
}
std::string lowerCase(std::string str)
{
    std::transform(str.begin(), str.end(), str.begin(), ::tolower);
    return str;
}
 
 
int main(int argc, char *argv[])
{
    function_list["trim"] = trim;
    function_list["reverseString"] = reverseString;
    function_list["upperCase"] = upperCase;
    function_list["lowerCase"] = lowerCase;
 
    Array<std::string> arr;
    arr.add("  foo  ");
    arr.add("   bar   ");
    arr.add("   lol   ");
    for (std::size_t i = 0, cnt = arr.size(); i < cnt; ++i)
        std::cout << '"' << arr[i] << '"' << std::endl;
 
    arr = array_map("trim", arr);
    std::cout << std::endl << "Trim: " << std::endl;
    for (std::size_t i = 0, cnt = arr.size(); i < cnt; ++i)
        std::cout << '"' << arr[i] << '"' << std::endl;
 
    std::cout << std::endl << "Reverse String:" << std::endl;
    arr = array_map("reverseString", arr);
    for (std::size_t i = 0, cnt = arr.size(); i < cnt; ++i)
        std::cout << '"' << arr[i] << '"' << std::endl;
 
    std::cout << std::endl << "Reverse String (again):" << std::endl;
    arr = array_map("reverseString", arr);
    for (std::size_t i = 0, cnt = arr.size(); i < cnt; ++i)
        std::cout << '"' << arr[i] << '"' << std::endl;
 
    std::cout << std::endl << "UpperCase:" << std::endl;
    arr = array_map("upperCase", arr);
    for (std::size_t i = 0, cnt = arr.size(); i < cnt; ++i)
        std::cout << '"' << arr[i] << '"' << std::endl;
 
    std::cout << std::endl << "LowerCase:" << std::endl;
    arr = array_map("lowerCase", arr);
    for (std::size_t i = 0, cnt = arr.size(); i < cnt; ++i)
        std::cout <<  '"' << arr[i] << '"' << std::endl;
 
    std::cout << std::endl;
    
    std::cin.get();
}
Примеры, конечно, не очень хорошие, но суть сводится к тому, что написать все это самому не сложно. Вопрос только в том, а надо ли это?
0
3 / 3 / 2
Регистрация: 05.01.2013
Сообщений: 264
21.09.2014, 16:55  [ТС]
KOPOJI, спасибо, конечно. Я что-то типа такого уже начал сам писать, но быстро заленился, хочу готовое. Впрочем, я еще не определился с языком, но, думаю, можно и C# и C++ одновременно изучать. Они же похожие, как и вообще большинство современных языков. Просто в C# уже многое есть, а в си, нужно самому писать или искать библиотеки.
0
2444 / 1842 / 406
Регистрация: 15.12.2013
Сообщений: 8,243
21.09.2014, 17:45
Цитата Сообщение от PhpNewbie Посмотреть сообщение
Впрочем, я еще не определился с языком, но, думаю, можно и C# и C++ одновременно изучать. Они же похожие, как и вообще большинство современных языков.
Как большинство ООП языков.Согласен можно изучать параллельно,возможно,так даже лучше разберетесь.
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
21.09.2014, 18:17
PhpNewbie, дело в том, что C++ - это не PHP и здесь просто используются другие подходы. В некоторых отношениях разницы, в общем-то, почти нет. Ну вот, к примеру, та же file. Зачем такая обертка? Разве есть принципиальная разница между, к примеру, такими вариантами
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <algorithm>
#include <vector>
#include <fstream>
#include <string>
 
std::vector<std::string> file(const char *filename)
{
    std::ifstream file(filename);
    std::vector<std::string> lines;
    for (std::string line; std::getline(file, line);)
        lines.push_back(line);
    return lines;
}
 
int main(int argc, char *argv[])
{
    std::vector<std::string> arr = file("./1.txt");
    std::for_each(arr.begin(), arr.end(), [](std::string line) {
        std::cout << line << std::endl;
    });
    std::cin.get();
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <vector>
#include <algorithm>
#include <fstream>
#include <string>
 
int main(int argc, char *argv[])
{
    std::ifstream file("./1.txt");
    std::vector<std::string> lines;
    for (std::string line; std::getline(file, line);)
        lines.push_back(line);
    std::for_each(lines.begin(), lines.end(), [](std::string line) {
        std::cout << line << std::endl;
    });
    std::cin.get();
}
Причем, довольно часто file в php используют для работы с каждой отдельной строкой, а не для работы со всеми строками сразу, поэтому и запоминать в контейнер, в общем-то, зачастую нет смысла. Итого получаем такой вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <fstream>
#include <string>
 
int main(int argc, char *argv[])
{
    std::ifstream file("./1.txt");
    for (std::string line; std::getline(file, line); )
        std::cout << line << std::endl;
    std::cin.get();
}
Итого, получаем по размеру кода, в общем-то, одинаковые листинги первого и последнего кода (если вынести "свои" функции в отдельные файлы). По удобству, имхо, они тоже одинаковые.
Я не говорю, что писать подобные обертки плохо или хорошо. Быть может, кому-то это покажется удобнее, а кому-то наоборот. Я лишь хотел указать на то, что это другой язык и здесь другие, так сказать, традиции.. К примеру, в том же лиспе функцию file нет особого смысла описывать, потому что выглядеть это будет глупо - там другая идеология..
Lisp
1
2
(with-open-file (stream "/some/file/name.txt")
  (format t "~a~%" (read-line stream)))
А в других языках другие функции. Просто надо привыкнуть и использовать те возможности языка, которые он предоставляет, а не полагаться на старые привычки и написание подобных костылей без острой необходимости. Имхо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.09.2014, 18:17
Помогаю со студенческими работами здесь

Работа со списками в LISP, используя базовые функции CAR, CDR, CONS
Дан список ( (A B ( C ) ) (D (E) (K L M))) получить: список (C) список (A B C D) список (K A C) Помогите, пожалуйста )

Библиотека, содержащая базовые функции для работы с любым массивом (открыть, сохранить, заполнить, очистить)
Здравствуйте! Помогите, пожалуйста, исправить программу. Я написала функции в обычном приложении WindowsForms - всё работает, а затем...

Вызов функции js в php скрипте и передача значения js в php скрипт
Доброе время суток.! Подскажите пожалуйста как можно (и можно ли вообще) вызвать функцию js на стороне сервера и потом результат...

Использование php функции из другого файла php
Добрый день. Я только начинаю изучать PHP, поэтому буду рад любой информации. У меня есть reg.php в которой проверяются все веденные поля...

Вызов js функции в php функции что в js
В общем имеем такое извращение &lt;script&gt; ... document.write(&quot;&lt;?php echo Consultationscalendar::classTD($teacherId) ?&gt;&quot;); ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru