filein.txt
Petya,K221,1,2,3;Vasya,K222,4,5,6;Senya,K223,7,8,0;Goga,K224,1,2,3;
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <iterator>
#include <algorithm>
using namespace std;
template<typename X = int>
struct Data
{
X one;
X two;
X three;
Data(X x1 = 0, X x2 = 0, X x3 = 0) : one{x1}, two{x2}, three{x3}
{}
};
template<typename X = int>
struct DataRecord
{
pair<string, string> text;
Data<X> data;
DataRecord(string _s1 = {}, string _s2 = {},
X _x1 = 0, X _x2 = 0, X _x3 = 0)
: text{_s1, _s2}, data{_x1, _x2, _x3}
{}
};
template<typename X = int>
istream& operator>>(istream& is, DataRecord<X>& record)
{
char c;
getline(is, record.text.first, ',');
getline(is, record.text.second, ',');
is >> record.data.one;
is >> c;
if(c == ',')
{
is >> record.data.two;
is >> c;
if(c == ',')
{
is >> record.data.three;
}
}
is >> c;
if(c != ';')
{
is.clear(ios_base::failbit);
}
return is;
}
struct DataSet
{
vector<DataRecord<>> records;
DataSet() : records{}{}
void load(string filename) noexcept;
Data<> sumsByColumns() noexcept;
};
void DataSet::load(string filename) noexcept
{
ifstream in(filename);
if(!in)
{
//...
return;
}
copy(istream_iterator<DataRecord<>>{in}, {}, back_inserter(records));
}
Data<> DataSet::sumsByColumns() noexcept
{
Data<> result;
for(const auto& rec : records)
{
result.one += rec.data.one;
result.two += rec.data.two;
result.three += rec.data.three;
}
return result;
}
int main()
{
DataSet ds;
ds.load("C:\\infile.txt");
Data<> result{ds.sumsByColumns()};
for(const auto& rec : ds.records)
{
cout << rec.text.first << '\t'
<< rec.text.second << '\t'
<< rec.data.one << '\t'
<< rec.data.two << '\t'
<< rec.data.three << '\n';// Если формат записей в файле
// построчный '\n' нужно убрать.
}
cout << "\nTotal:\t\t"
<< result.one << '\t'
<< result.two << '\t'
<< result.three << endl;
}
OUT
Petya K221 1 2 3
Vasya K222 4 5 6
Senya K223 7 8 0
Goga K224 1 2 3
Total: 13 17 12
map<Point, bool> и map<Point, long>
bool operator<(const Point& p1, const Point& p2)
{
return (p1.x0 < p2.x0) && (p1.y0 < p2.y0);
}
bool operator<(const Point& a, const Point& b)
{
return (a.x < b.x) || (a.y < b.y);
}
name1.compare(name2); //strcmp()
name1 == name2; //operator==
pole[m-1][...]
находится мусорfor(int i = 0; i < m-1; i++)
{
for (int j = 0; j < n; j++)
{
fscanf(f, "%d", &pole[i][j]);
printf("%d ", pole[i][j]);
}
printf("\n");
}
for (int i = 0; i < m; i++)//??? i < m-1 ???
{
x = 0;
for (int j = 0; j < n; j++)
{
switch (pole[i][j])
{
case 1:
brick(x, y, DarkGray);
printf("%d %d\n", x, y);
break; //???
case 0:;
//...
}
x += 100;
}
y += 100;
}
#include<iostream>
#include<sstream>
#include<string>
#include<vector>
#include<algorithm>
#include<iterator>
using namespace std;
int main()
{
string s = "10 20 30 50 99 786 521 3";
istringstream is(s);
vector<int> c;
copy(istream_iterator<int>(is), {}, back_inserter(c));
for(int i : c)
{
cout << i << ' ';
}
int j = c[1] + c[2];
cout << "j == " << j;
}
#include<iostream>
#include<string>
using namespace std;
int main()
{
setlocale(LC_ALL, "Russian");
system("chcp 1251 > null");
string s;
cout << "Введите имя: ";
while(getline(cin, s))
{
if(s.empty())
{
cout << "Вы не ввели имя!\n"
<< "Введите имя: ";
continue;
}
break;
}
cout << "\nВаше имя: " << s
<< "\nНажмите любую клавишу...";
cin.get();
}
#include<iostream>
#include<string>
#include<algorithm>
#include<cctype>
#include<clocale>
using namespace std;
/* functions from https://code-examples.net/ru/q/34ef7 */
// trim from start (in place)
static inline void ltrim(string &s)
{
s.erase(s.begin(), std::find_if(s.begin(), s.end(), [](const auto ch) {
return !isspace(ch);
}));
}
// trim from end (in place)
static inline void rtrim(string &s)
{
s.erase(std::find_if(s.rbegin(), s.rend(), [](const auto ch) {
return !isspace(ch);
}).base(), s.end());
}
// trim from both ends (in place)
static inline void trim(string &s)
{
ltrim(s);
rtrim(s);
}
int main()
{
setlocale(LC_ALL, "Russian");
system("chcp 1251 > null");
string s;
cout << "Введите имя: ";
while(getline(cin, s))
{
//upd
replace_if(s.begin(), s.end(), [](const auto c){return iscntrl(c); }, ' ');
trim(s);
//end upd
if(s.empty())
{
cout << "Вы не ввели имя!\n"
<< "Введите имя: ";
continue;
}
break;
}
cout << "\nВаше имя: " << s
<< "\nНажмите любую клавишу...";
cin.get();
}
#include <algorithm>
#include <iostream>
using namespace std;
template<typename T, int N, int M>
auto count_match(T(&a)[N], T(&b)[M])
{
size_t match_count = 0;
sort(begin(b), end(b));
for(auto& val : a)
{
if(binary_search(begin(b), end(b), val))
{
++match_count;
}
}
return match_count;
}
int main()
{
int v[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, 22};
int v2[] = {0, 22, 33, 5, 4, 8, 9, 0, 13};
std::cout << count_match(v, v2);
cin.get();
}
Практическое руководство. Изменение фрагмента кода после его вставки в код
Используйте клавишу TAB для перемещения от одной точки замены до следующей. Для перемещения к предыдущей точке замены используйте сочетание клавиш SHIFT + TAB.
#include<iostream>
#include<string>
#include<algorithm>
//ru.cppreference.com/w/cpp/algorithm/count
using namespace std;
int main()
{
string s = "Asdk6949_glsjg+()(& *&%^%$df gdfg e$T#%Y KNUYNL GIK5654";
cout << count_if(s.begin(), s.end(), ::isalpha) << endl;
}
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<limits.h>
int main()
{
srand((unsigned)time(NULL));
const int n = 4;
const int m = 3;
int idx = 0;
int summa = 0;
int min_sum = INT_MAX;
int a[n][m];
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
a[i][j] = rand() % 20;
summa += a[i][j];
printf("a[%d][%d]=%d\n", i, j, a[i][j]);
}
if(min_sum > summa)
{
min_sum = summa;
idx = i;
}
printf("summa[%d]=%d\n", i, summa);
summa = 0;
}
printf("min summa[%d]=%d\n", idx, min_sum);
for(int i = 0; i < m; i++)
{
printf("a[%d][%d]=%d\n", idx, i, a[idx][i]);
}
return 0;
}
// Functions array
uint8_t functions_index;
int (*functions[NUMBER_FUNCTIONS])(String);
char * functions_names[NUMBER_FUNCTIONS];
void function(char * function_name, int (*f)(String)){
functions_names[functions_index] = function_name;
functions[functions_index] = f;
functions_index++;
}
#include<iostream>
#include<string>
/*
* Будем считать, что std::string это String
*/
#define NUMBER_FUNCTIONS 10
struct aRest
{
uint8_t functions_index;
int (*functions[NUMBER_FUNCTIONS])(std::string);
char* functions_names[NUMBER_FUNCTIONS];
//...
aRest() : functions_index(0){};
void function(char * function_name, int (*f)(std::string))
{
functions_names[functions_index] = function_name;
functions[functions_index] = f;
functions_index++;
}
};
class App
{
aRest bt_rest;
public:
explicit App() : bt_rest(){};
//...
int startManufacturing(std::string command);
void setup();
void call(std::string s);// Для теста. Там то же по другому...
//...
};
int App::startManufacturing(std::string command)
{
std::cout << "startManufacturing\n"
<< "with command " << command
<< " " << this << std::endl;
return 1;
}
void App::setup()
{
bt_rest.function("startManufacturing", (int(*)(std::string))&startManufacturing);
//reinterpret_cast<int(*)(std::string)>(&startManufacturing)
}
void App::call(std::string s)
{
bt_rest.functions[0](s);
}
int main()
{
App ap;
ap.setup();
ap.call("COMMAND");
}
#include<iostream>
#include<string>
#include<functional>
#define NUMBER_FUNCTIONS 10
template<typename T>
struct aRest
{
uint8_t functions_index;
int (T::*functions[NUMBER_FUNCTIONS])(std::string);
char* functions_names[NUMBER_FUNCTIONS];
//...
aRest() : functions_index(0){};
void function(char * function_name, int(T::*f)(std::string))
{
functions_names[functions_index] = function_name;
functions[functions_index] = f;
functions_index++;
}
};
class App
{
aRest<App> bt_rest;
public:
App() : bt_rest(){};
//...
int startManufacturing(std::string command);
void setup();
void call(std::string fn);
//...
};
int App::startManufacturing(std::string command)
{
std::cout << "startManufacturing\n"
<< "with command " << command
<< " " << this << " " << std::endl;
return 1;
}
void App::setup()
{
bt_rest.function("startManufacturing", &startManufacturing);
}
void App::call(std::string s)
{
std::mem_fn(bt_rest.functions[0])(this, s);
}
int main()
{
App ap;
ap.setup();
ap.call("COMMAND");
}
#include <stdio.h>
#include <wchar.h>
#include <windows.h>
int main()
{
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
if (hOut == INVALID_HANDLE_VALUE)
{
return GetLastError();
}
DWORD dwMode = 0;
if (!GetConsoleMode(hOut, &dwMode))
{
return GetLastError();
}
dwMode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING;
if (!SetConsoleMode(hOut, dwMode))
{
return GetLastError();
}
wprintf(L"\u001B[31mRed Text!\u001B[0mNormal Text\r\n");
getchar();
return 0;
}
OUT:
3.4 Control Structures
Normally, statements in a program are executed one after the other in the order in which
they’re written. This is called sequential execution. Various C statements we’ll soon discuss
enable you to specify that the next statement to be executed may be other than the
next one in sequence. This is called transfer of control.
...
...
Bohm and Jacopini’s work demonstrated that all programs could be written in terms
of only three control structures, namely the sequence structure, the selection structure
and the repetition structure. The sequence structure is built into C. Unless directed otherwise,
the computer executes C statements one after the other in the order in which
they’re written. The flowchart segment of Fig. 3.1 illustrates C’s sequence structure.
3.5 The if Selection Statement
Selection statements are used to choose among alternative courses of action. For example,
suppose the passing grade on an exam is 60. The pseudocode statement
if (expr) // start of if-statement
{ // start of block
int n = 1; // declaration
printf("%d\n", n); // expression statement
} // end of block, end of if-statement
statement - инструкция
Слово statement обычно переводят на русский термином "оператор". Таким образом, мы и привыкли, что if, while, case и т.п. – это операторы. К сожалению, в С++ этот перевод приводит к трудностям, поскольку имеется термин operator - словом "оператор" естественно было бы переводить его. Из возможных и встречавшихся в русской литературе переводов statement (утверждение, предложение, инструкция) в переводе книжки Струструпа, посвященной третьему стандарту С++, принят термин "инструкция".
expression statement
инструкция-выражение
Инструкция, которая одновременно является и выражением. Примеры: присваивание, вызов функции.
operator - оператор
Встроенная операция языка, такая, как сложение. (Также перегруженная операция, задаваемая функцией-членом класса.-> к подмножеству Си не относится)
#include <iostream>
#include <memory>
#include <unordered_map>
#include <list>
struct Listener
{
std::string _name;
Listener(std::string name) : _name{ name }{}
~Listener() = default;
};
using Listeners = std::unordered_map<std::string, std::list<Listener>>;
class EventManager
{
public:
EventManager(std::list<std::string>& eventTypes);
//...
~EventManager() = default;
void print()
{
for(const auto& v : *m_listeners)
{
std::cout << v.first << " -> ";
for(const auto& s : v.second)
{
std::cout << s._name << ' ';
}
std::cout << std::endl;
}
}
private:
std::unique_ptr<Listeners> m_listeners;
};
EventManager::EventManager(std::list<std::string>& eventTypes)
: m_listeners { std::make_unique<Listeners>() }
{
auto insert_it(std::end( *m_listeners ));
for (const auto &et : eventTypes)
{
insert_it = m_listeners->insert( insert_it, {et, {}} );
}
}
int main()
{
std::list<std::string> events { "Open", "Move", "Close" };
EventManager eManager{ events };
eManager.print();
}
#include <iostream>
#include <cmath>
using namespace std;
int fb(const int& b)
{
return pow(4 * b, 1 / 3);
}
int fax(const int& a, const int& x)
{
return (a + 2 * x) / pow(x, 1 / 2);
}
int main()
{
const int a = -18;
int resultAX = 0;
int resultB = 0;
for(int x = -1; x <= 10; ++x)
{
resultAX += fax(a, x);
}
for(int b = 2; b <= 10; b += 2)
{
resultB += fb(b);
}
cout << "x = " << resultAX << '\n'
<< "b = " << resultB << '\n'
<< "y = " << resultAX - resultB << endl;
}
OUT:
x = -108
b = 5
y = -113
#include <stdio.h>
#include <stdlib.h>
int main()
{
char buf[80];
int i = 0;
int a;
char op;
int b;
while((buf[i] = _getch(stdin)) != 13)
{
putchar(buf[i]); ++i;
}
sscanf(&buf, "%i%c%i", &a, &op, &b);
if(op == '*')
printf(" = %i", a * b);
return 0;
}