Нужно переделать код так, чтобы вводилась матрица из файла

Написал код, но в итоге сказали переделать так, чтобы считывались слова из файла, как матрица и каждая строка должна быть отсортирована по увеличению количества символов (уже сделал). Я просто не понимаю, как сделать , чтобы из файла считывалось это. Очень буду благодарен за помощь.

     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;
}
→ Ссылка