Нужно переделать код так, чтобы вводилась матрица из файла
Написал код, но в итоге сказали переделать так, чтобы считывались слова из файла, как матрица и каждая строка должна быть отсортирована по увеличению количества символов (уже сделал). Я просто не понимаю, как сделать , чтобы из файла считывалось это. Очень буду благодарен за помощь.
using namespace std;
int main()
{
string s;
cout << "Enter string:" << endl;
getline(cin, s);
vector<string> v;
istringstream iss(s);
string word;
while (iss >> word) {
v.push_back(word);
}
for(int i=0;i<v.size() - 1;i++)
for(int j=0;j<v.size() - 1;j++)
if(v[j].length()>v[j+1].length())
swap(v[j], v[j+1]);
cout << "Result:" << endl;
for(int i=0;i<v.size();i++)
cout << v[i] << " ";
return 0;
}
Ответы (1 шт):
Автор решения: pagislav
→ Ссылка
Вы можете использовать freopen
freopen(file_name, "r", stdin);
Добавьте его в начало int main и всё, что должно было читаться из стандартного потока, пойдёт из файла
Вот переделанный под матрицу код
#include <iostream>
#include <vector>
#include <sstream>
#include <string>
using namespace std;
int main()
{
freopen("input.txt", "r", stdin);
string s;
cout << "Enter string:" << endl;
getline(cin, s);
vector<vector<char> > v;
istringstream iss(s);
string word;
int i = 0;
while (iss >> word) {
v.push_back(vector<char>(0));
for (char c : word)
{
v[i].push_back(c);
}
i++;
}
for(int i=0;i<v.size() - 1;i++)
for(int j=0;j<v.size() - 1;j++)
if(v[j].size()>v[j+1].size())
swap(v[j], v[j+1]);
cout << "Result:" << endl;
for(int i=0;i<v.size();i++)
{
for (int j = 0; j < v[i].size(); ++j)
{
cout << v[i][j];
}
cout << " ";
}
return 0;
}