Как сделать чтобы string считывался?
Не могу понять почему не получается с помощью getline это сделать.
#include <string> // не "string.h" (Си) и не <cstring>
// ...
getline(cin, mvd->specialisty);
// ...
Добрый день, планирую поступать в колледж на специальность прикладная информатика, но дело в том, что у меня очень плохо обстоят дела с физикой.
Много ли будет физики
после 1 курса
Я полный ноль в программировании
Что посоветуете новичку который только только начал?
#include <iostream>
#include <vector>
#include <tuple>
using namespace std;
int main()
{
vector<vector<tuple<int, int, int>>> values(3);
values[0].emplace_back(1, 2, 3);
values[1].emplace_back(4, 5, 6);
values[2].emplace_back(7, 8, 9);
for(const auto& xv : values)
{
for(const auto [one, two, three] : xv)
{
cout << one << " " << two << " " << three;
}
cout << "\n";
}
cin.get();
}
Где я могу такое найти?
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
class CircleCanvas extends Canvas
{
public void paint(Graphics g)
{
Dimension d = this.getSize();
int diam = Math.min(d.width - 1, d.height - 1) - 60;
g.drawOval(20, 20, diam, diam);
}
}
class MyFrame extends Frame
{
public MyFrame()
{
super("Painting");
setBackground(Color.gray); // GRAY а не GREY
setLayout(new GridLayout(3, 3));
add(new CircleCanvas());
setSize(500, 400);
setVisible(true);
// обработчик событий
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent we)
{
System.exit(0);
}
});
}
}
public class RunGn
{
public static void main(String[] u)
{
Frame f = new MyFrame();
}
}
Можно помочь с ответом, а не включать своё остроумие, подсказка небольшая.
#include<iostream>
#include<string>
#include<vector>
#include<iterator>
#include<memory>
#include<sstream>
#include<Windows.h>
using namespace std;
enum class spType {ALL, SP, TH};
class Policlinic
{
public:
Policlinic();
~Policlinic();
// ...
void addSpecialists(const string& s);
void addTherapists(const string& s);
void printPersonnel(spType = spType::ALL);
// ...
// Геттеры Сеттеры сам по шаблону
// ...
private:
struct Personnel;
unique_ptr<Personnel> m_personnel;
string desk;
string type;
unsigned pharmacy = 0;
friend istream& operator>>(istream& is, vector<string>& values);
friend ostream& operator<<(ostream& os, const vector<string>& values);
};
struct Policlinic::Personnel
{
vector<string> specialists;
vector<string> therapists;
};
Policlinic::Policlinic() : m_personnel(make_unique<Personnel>())
{
}
Policlinic::~Policlinic()
{
}
istream& operator>>(istream& is, vector<string>& values)
{
copy(istream_iterator<string>{is}, {}, back_inserter(values));
return is;
}
ostream& operator<<(ostream& os, const vector<string>& values)
{
copy(values.begin(), values.end(), ostream_iterator<string>{os, "\n"});
return os;
}
void Policlinic::addSpecialists(const string& s)
{
istringstream is(s);
is >> m_personnel->specialists;
}
void Policlinic::addTherapists(const string& s)
{
istringstream is(s);
is >> m_personnel->therapists;
}
void Policlinic::printPersonnel(spType stype)
{
switch(stype)
{
case spType::SP:
cout << "Специалисты:\n"
<< m_personnel->specialists;
break;
case spType::TH:
cout << "Терапевты:\n"
<< m_personnel->therapists;
break;
default:
cout << "[Весь персонал]\n";
printPersonnel(spType::SP);
printPersonnel(spType::TH);
break;
}
}
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
setlocale(LC_ALL, "ru");
Policlinic ply;
// Для простоты
string value;
cout << "Введите врачей специалистов через пробел \n$: ";
getline(cin, value);
ply.addSpecialists(value);
cout << "\nВведите врачей терапевтов через пробел\n$: ";
getline(cin, value);
ply.addTherapists(value);
ply.printPersonnel(spType::ALL);
system("pause");
}
#include<iostream>
#include<vector>
#include<iterator>
#include<algorithm>
#include<fstream>
#include<numeric>
using namespace std;
int get_min_even(const vector<int>& numbers)
{
vector<int> result;
copy_if(numbers.cbegin(), numbers.cend(),
back_inserter(result), [](const int i){ return !(i % 2); });
return *min_element(result.cbegin(), result.cend());
}
int main()
{
vector<int> numbers;
ios_base::sync_with_stdio(false);
if(ifstream in("D:\\numbers_in.txt"); in)
{
copy(istream_iterator<int>{in}, {}, back_inserter(numbers));
}
if(ofstream out("D:\\numbers_out.txt"); out)
{
out << get_min_even(numbers);
}
int count = numbers.size() - 2; // предположим 10
for(int i = 0; i < count; ++i)
{
// вставка в начало вектора это BAD.
numbers.push_back(accumulate(numbers.cbegin(), numbers.cend(), 0));
numbers.erase(remove(numbers.begin(), numbers.end(), *min_element(numbers.begin(), numbers.end())));
}
// Это потому что вставляли в конец, теперь нужно перевернуть.
reverse(numbers.begin(), numbers.end());
// маленький костыль
swap(numbers[count], numbers[count + 1]);
if(ofstream out("D:\\numbers_result_out.txt"); out)
{
copy(numbers.cbegin(), numbers.cend(), ostream_iterator<int>{out, "\n"});
}
cout << "Ok" << endl;
cin.get();
}
У меня при вводе ограничивается ввод до 5-ти символов, а я хочу ввести любое число, любого количества
#include<iterator>
#include<iostream>
#include<algorithm>
#include<memory>
using namespace std;
class Decmal
{
public:
explicit Decmal(size_t size = 5);
Decmal(const Decmal&);
size_t get_size() const
{
return size;
}
// ...
private:
size_t size;
unique_ptr<char> data;
// ...
private:
void resize(size_t sz);
friend istream& operator>>(istream& is, Decmal& dec);
friend ostream& operator<<(ostream& os, const Decmal& dec);
};
Decmal::Decmal(size_t size) : size{ size }, data(new char[size])
{
fill_n(data.get(), size, '0');
}
Decmal::Decmal(const Decmal& rh)
{
size = rh.size;
data.reset(new char[size]);
copy_n(rh.data.get(), size, data.get());
}
void Decmal::resize(size_t new_size)
{
if(size < new_size)
{
data.reset(new char[new_size]);
size = new_size;
}
}
istream& operator>>(istream& is, Decmal& dec)
{
is.putback(is.get());
size_t new_size = static_cast<size_t>(is.rdbuf()->in_avail() - 1);
dec.resize(new_size);
copy_n(istream_iterator<char>{is}, dec.size, dec.data.get());
return is;
}
ostream& operator<<(ostream& os, const Decmal& dec)
{
copy_n(dec.data.get(), dec.size, ostream_iterator<char>{os});
return os;
}
int main()
{
Decmal x;
cin >> x;
cout << x.get_size() << " " << x << endl;
system("pause");
}
Не совсем понял принцип работы этого кода.
#include<iterator>
#include<iostream>
#include<algorithm>
using namespace std;
class Decmal
{
public:
explicit Decmal(size_t size = 5);
Decmal(const Decmal&);
~Decmal(){ delete[] data; }
size_t get_size() const
{
return size;
}
// ...
private:
size_t size;
unsigned char* data = nullptr;
// ...
private:
void resize(size_t sz);
friend istream& operator>>(istream& is, Decmal& dec);
friend ostream& operator<<(ostream& os, const Decmal& dec);
};
Decmal::Decmal(size_t size) : size{ size }, data(new unsigned char[size])
{
fill_n(data, size, '0');
}
Decmal::Decmal(const Decmal& rh)
{
size = rh.size;
delete[] data;
data = new unsigned char[size];
copy_n(rh.data, size, data);
}
void Decmal::resize(size_t new_size)
{
if(size < new_size)
{
delete[] data;
data = new unsigned char[new_size];
size = new_size;
}
}
istream& operator>>(istream& is, Decmal& dec)
{
char c = 0;
size_t sz = 0;
while(is.read(&c, 1) && c != '\n') // \n == 10 \r == 13
{
if(sz == dec.size)
{
unsigned char* tmp = new unsigned char[sz + 1];
copy_n(dec.data, dec.size, tmp);
dec.resize(sz + 1);
copy_n(tmp, dec.size, dec.data);
delete[] tmp;
}
dec.data[sz] = c;
++sz;
}
return is;
}
ostream & operator<<(ostream& os, const Decmal& dec)
{
copy_n(dec.data, dec.size, ostream_iterator<char>{os});
return os;
}
int main()
{
Decmal x;
cin >> x;
cout << x.get_size() << " " << x << "\n";
Decmal y = x;
cout << y << endl;
system("pause");
}
#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
А что делать, если элементы постоянно добавляются? Т.е я убрал 2 элемента, добавились еще 2 и так до бесконечности. Каким образом добраться до самого нижнего элемента?
Какие есть книги чтобы заполнить дыры по информатике и ИКТ?
посоветуйте книгу или другой ресурс которая бы охватывала все об икт и информатике
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>("Огненный шар"));