#include<iostream>
#include<fstream>
#include<limits>
#include<vector>
#include<iterator>
#include<algorithm>
#include<string>
using namespace std;
int main()
{
const string filein = "D:\\numbers_in.txt";
const string fileout = "D:\\numbers_out.txt";
vector<double> v;
ios_base::sync_with_stdio(false);
if(ifstream ifs(filein); ifs)
{
transform(istream_iterator<string>{ifs}, {}, back_inserter(v), [](const auto& xs){
double d = numeric_limits<double>::infinity();
try
{
d = stod(xs);
}
catch(...)
{
cout << "wrong\n";
}
return d;
});
}
copy(v.begin(), v.end(), ostream_iterator<double>{cout, " "});
if(ofstream ofs(fileout); ofs)
{
copy(v.begin(), v.end(), ostream_iterator<double>{ofs, " "});
}
cin.get();
}
-1.0 3.0e5 inf 23.01 55.003
-1 300000 inf 23.01 55.003
-1.0 3.0e5 inf
5.0 inf 0.008
1.45 3.99 -5.25
#include<iostream>
#include<fstream>
#include<limits>
#include<vector>
#include<iterator>
#include<algorithm>
#include<string>
#include<sstream>
using namespace std;
auto parse_line = [](istream& is)
{
vector<double> row;
transform(istream_iterator<string>{is}, {}, back_inserter(row), [](const auto& xs){
double d = numeric_limits<double>::infinity();
try
{
d = stod(xs);
}
catch(...)
{
cout << "wrong\n";
}
return d;
});
return row;
};
int main()
{
const string filein = "D:\\numbers_in.txt";
const string fileout = "D:\\numbers_out.txt";
vector<vector<double>> matrix;
ios_base::sync_with_stdio(false);
if(ifstream ifs(filein); ifs)
{
string line;
while(getline(ifs, line))
{
istringstream is{ line };
matrix.push_back(parse_line(is));
}
}
for(const auto& v : matrix)
{
copy(v.begin(), v.end(), ostream_iterator<double>{cout, " "});
cout << "\n";
}
if(ofstream ofs(fileout); ofs)
{
for(const auto& v : matrix)
{
copy(v.begin(), v.end(), ostream_iterator<double>{ofs, " "});
ofs << "\n";
}
}
cin.get();
}
А нужно написать бесконечность потому что потом буду искать минимальный элемент среди этих элементов и чтобы этот минус не мешал поиск.
using Matrix = vector<vector<double>>;
auto find_min = [](const Matrix& m)
{
vector<double> values;
for(const auto& row : m)
{
values.push_back(*min_element(row.begin(), row.end()));
}
return *min_element(values.begin(), values.end());
};
// ...
cout << "Min element: " << find_min(matrix) << endl;
Min element: -5.25
x++*n
(x+1)*n < n+1 // вы скобки забыли
++x * n < n + 1
Предикат в программировании — выражение, использующее одну или более величину с результатом булева типа.
bool - type, capable of holding one of the two values: true or false.
Зачем этот знак?
1) Returns true if lhs is less than rhs, false otherwise.
// ...
Effect(string n) : name{ n }{}
virtual ~Effect() = 0;
// ...
// ...
FireBall::FireBall(string _name) : Effect(_name), count{ 10 }
{
}
// ...
vector<unique_ptr<Effect>> effects;
effects.push_back(make_unique<FireBall>("Огненный шар"));
The compiler found an identifier where it wasn't expected. Make sure that identifier is declared before you use it.
#include "Mob.h"
Как исправить
#pragma once
#include "Weapon.h"
class Mob;
class Player
{
public:
int health, armor, exp, mana;
int currentHealth, currentArmor, currentMana, toNextLvlExp, balance;
int missChanceBody, missChanceHead, missChanceLegs;
Weapon sword;
Weapon magicStick;
Player(int _health, int _armor, const Weapon& _sword, const Weapon& _magicStick);
int takePhysicalDamage(Mob& m);
};
mob.h:
#pragma once
#include <string>
#include "Player.h"
#include <iostream>
using namespace std;
int main()
{
float x, y;
char z;
char c = 'n';
do {
cout << "Write your first number:";
cin >> x;
cout << "Write your second number:";
cin >> y;
cout << "Write your sign:";
cin >> z;
switch(z)
{
case '+':
{
cout << "Your answer: "
<< x << "+" << y << "="
<< x + y
<< "\n";
}
break;
case '-':
{
cout << "Your answer: "
<< x << "-" << y << "="
<< x - y
<< "\n";
}
break;
case '*':
{
cout << "Your answer: "
<< x << "*" << y << "="
<< x * y
<< "\n";
}
break;
case '/':
{
if(y == 0)
{
cout << "You cant division!" << endl;
}
else
{
cout << "Your answer: "
<< x << "/" << y << "="
<< x / y
<< "\n";
}
}
break;
}
cout << "continue? (y/n): ";
} while((cin >> c) && c == 'y');
}
double x = 12.3456789;
double y = 98.7654321;
QString str = QString("x: %1 y: %2").arg(x, 0, 'f', 3).arg(y, 0, 'f', 3);
OUT:
x: 12.346 y: 98.765
Задача: удалить из каталога все файлы в названии которых есть символ "~" и размер которых 0.
#include<iostream>
#include<string>
#include<filesystem>
#include<vector>
// #include<windows.h> // DeleteFile ...
using namespace std;
using namespace experimental::filesystem;
auto pred = [](const auto& entry)
{
return !is_directory(entry.path()) &&
entry.path().filename().string().find("~") != string::npos &&
file_size(entry.path()) == 0;
};
auto getFiles_if(const string& dir, decltype(pred) p)
{
vector<directory_entry> result;
if(!exists(dir))
{
cerr << "error: " << dir << "does not exist!";
return result;
}
copy_if(directory_iterator(dir), {}, back_inserter(result), p);
if(result.empty())
{
cout << "files not found\n";
}
return result;
}
int main()
{
string dir = "D:\\temp";
for(const auto& pf : getFiles_if(dir, pred))
{
string file = pf.path().string();
cout << "delete file? " << file << " (y/n): ";
if(char c = 0; (cin >> c), c == 'y')
{
if(remove(pf.path())) // Всего лишь заменить на DeleteFile(file.c_str());
{
cout << "delete: " << file << "\n";
}
// ...
}
else
{
cout << "skip: " << file << "\n";
}
}
system("pause");
}
Почему так?
#include<iostream>
#include<string>
#include<sstream>
using namespace std;
struct Entry
{
string name;
int age;
};
istream& operator>>(istream& is, Entry& e)
{
is >> e.name >> e.age;
return is;
}
ostream& operator<<(ostream& os, Entry& e)
{
os << e.name << " " << e.age;
return os;
}
int main()
{
string line;
getline(cin, line);
istringstream is(line);
is.exceptions(ios_base::failbit);
Entry e;
try // I know it was wrong.
{
while(is >> e)
{
cout << e << "\n";
}
}
catch(exception& e)
{
cerr << e.what() << endl;
}
cout << "Done!\n";
string answer;
cin >> answer;
system("pause");
}
Задаю такой вопрос ибо не нашёл универсального решения
#include<iostream>
#include<cstdlib>
int main()
{
system(" "); // пробел важен
std::cout << "\x1b[31m" << "Hello user!";
std::cin.get();
}
#include<iostream>
int main()
{
int a;
std::cin.operator>>(a);
std::operator<<(std::cout, "a = ").operator<<(a);
}
this->_M_setstate(ios_base::badbit)
Каким образом символы конвертируется именно в 0?
уже 2 день с этой задачей борюсь
как это реализовать(теоретически)?
#include<iostream>
#include<sstream>
#include<string>
#include<fstream>
using namespace std;
string process(const string& filename)
{
ostringstream os;
if(ifstream ifs(filename); ifs)
{
string line;
while(getline(ifs, line))
{
if(auto pos = line.find("link"); pos != string::npos)
{
pos = line.find('\"', pos);
auto end = line.find('\"', pos + 1);
os << process(line.substr(pos + 1, end - pos - 1));
continue;
}
os << line << "\n";
}
}
return os.str();
}
int main()
{
cout << process("text.txt");
cin.get();
}
#include <iostream>
#include <set>
#include <algorithm>
#include <iterator>
using namespace std;
int main()
{
set<int> nums;
generate_n(inserter(nums, nums.end()), 42, []{ return rand() % 42; });
int n = 0; cin >> n;
cout << "\n"
<< ((nums.find(n) != nums.end()) ? "" : "Not ")
<< "Found"
<< endl;
}
А без цикла никак?
#include <iostream>
bool find(int a[], int sz, int value)
{
if(sz == -1)
return false;
else if(a[sz] == value)
return true;
else
return find(a, sz - 1, value);
}
int main()
{
int nums[] = { 4, 6, 9, 11 };
int i = 0;
std::cin >> i;
std::cout << "\n"
<< std::boolalpha
<< find(nums, sizeof(nums) / sizeof(int) - 1, i);
}
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main(int argc, char* argv[])
{
if(argc > 0)
{
vector<string> args(&argv[1], &argv[argc]);
for(const auto& n : args)
{
cout << "Hello " << n << "\n";
}
}
}
//...
for(int i = 1; i < argc; ++i)
{
cout << "Hello " << argv[i] << "\n";
}
//...
Она получает имя (name) как параметр командной строки и выдает "Hello, name". Измените программу так, чтобы она получала произвольное число имен и всем им выдавала свое приветствие: "Hello, ...".
hello.exe name1 name2 name3
Hello name1
Hello name2
Hello name3
13. (*3) Напишите функцию обработки ошибок, первый параметр который подобен форматирующей
строке-параметру printf() и содержит форматы %s, %c и %d. За ним может следовать произвольное
количество числовых параметров. Функцию printf() не используйте. Если смысл формата %s и
других форматов вам неизвестен, обратитесь к $$10.6. Используйте stdarg.h.
#include <iostream>
template<typename... Arg>
auto say_hello(std::ostream& os, Arg... args)
{
((os << args << "\n") , ...);
}
int main(int argc, char* argv[])
{
say_hello(std::cout, "Name", "Name1", "Name2");
std::cin.get();
}
#include<iostream>
#include<string>
using namespace std;
using mytype = pair<string, int>;
istream& operator>>(istream& is, mytype& m)
{
while(isalpha(is.peek()))
{
m.first.push_back(is.get());
}
is >> m.second;
return is;
}
ostream& operator<<(ostream& os, const mytype& m)
{
return os << m.first << m.second;
}
int main()
{
mytype mt;
cin >> mt;
cout << mt << endl;
}
#include<random>
#include<iostream>
#include<ctime>
int main()
{
std::default_random_engine dre(std::time(nullptr));
std::uniform_int_distribution<int> di(1, 80);
std::cout << di(dre) << std::endl;
std::cin.get();
}
<cstdlib> и <ctime>
void screen_function(); // объявление
// ...
void loop(){
screen_function(); // первое использование
}
// ...
void screen_function()
{
// ... определение
}
Тестировать сразу функцию main в зависимости от входных параметров argc и argv.