Top.Mail.Ru
Ответы
Аватар пользователя
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+4

Нужна помощь C++

Дана строка из 26 различных латинских букв - задаёт порядок сортировки между отдельными буквами: ba - будет означать, что в отсортированной строке b должно идти раньше a. Также даны N строк которые необходимо отсортировать между собой, используя указанное отношение порядка.

Входные данные
В первой строке вводится строка p из 26 символов - буквы латинского алфавита, расположенные в каком-то порядке (перестановка алфавита).

Во второй строке вводится число N (1≤N≤100)
- число строк, которые необходимо отсортировать.

Далее вводится N строк si
(1≤|si|≤100
), которые необходимо отсортировать в соответствии с заданным порядком сортировки.

Выходные данные
Необходимо вывести N строк, отсортированных в заданном порядке.

Пример
входные данныеСкопировать
5
qwertyuiopasdfghjklzxcvbnm
vnbhfgtyr
abacaba
qwer
qvbnm
zhu
выходные данныеСкопировать
qwer
qvbnm
abacaba
zhu
vnbhfgtyr

По дате
По рейтингу
Аватар пользователя
Новичок
123456789101112131415161718192021222324252627282930
 #include <algorithm> 
#include <iostream> 
#include <string> 
#include <unordered_map> 
#include <vector> 
using namespace std; 
int main() { 
    unordered_map<char, int> abc; 
    for (int n = 1; n <= 26; ++n) { 
        auto letter = cin.get(); 
        abc[letter] = n; 
    } 
    cout << abc['a'] << '\n'; 
    size_t count; 
    cin >> count; 
    vector<string> words(count); 
    for (auto& word : words) cin >> word; 
    puts(""); 
    auto compare = [&abc](const string& a, const string& b) { 
        const auto length = min(a.length(), b.length()); 
        for (size_t i = 0; i < length; ++i) { 
            if (abc[a[i]] != abc[b[i]]) { 
                return abc[a[i]] < abc[b[i]]; 
            } 
        } 
        return a.length() < b.length(); 
    }; 
    sort(words.begin(), words.end(), compare); 
    for (const auto& word : words) cout << word << '\n'; 
} 
Аватар пользователя
Ученик

#include <iostream>
#include <vector>
#include<cmath>
#include<numeric>
#include<algorithm>
#include<string>
#include<map>

using namespace std;

typedef long long ll;

vector<int> s(26);

bool cmp(string& a, string& b){
int sz = min((int)a.size(),(int)b.size());
for(int i = 0;i<sz;i++){
if(a[i]!=b[i]){
return s[a[i] - 'a'] < s[b[i] - 'a'];
}
}
return a.size() < b.size();
}

int main(){
int n;
char buf;
cin >> n;
for(int i = 0;i<26;i++){
cin >> buf;
s[buf - 'a'] = i;
}
vector<string> a(n);
for(auto&i:a){
cin >> i;
}
sort(a.begin(),a.end(),cmp);
for(auto&i:a){
cout << i << '\n';
}
}

Аватар пользователя
Мастер

Для решения этой задачи, вы можете воспользоваться языком программирования C++ и стандартной библиотекой для сортировки пользовательских данных. Вот пример кода, который решает задачу:

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
 #include <iostream> 
#include <vector> 
#include <string> 
#include <algorithm> 
 
using namespace std; 
 
int main() { 
    string p; 
    cin >> p; 
 
    // Создаем вектор, в котором будем хранить пары символов и их порядок. 
    vector<pair<char, char>> order(26); 
 
    for (int i = 0; i < 26; ++i) { 
        order[i] = {p[i], 'a' + i}; // символы и их порядок 
    } 
 
    // Сортируем порядок в соответствии с первым символом пары. 
    sort(order.begin(), order.end()); 
 
    int N; 
    cin >> N; 
 
    vector<string> strings(N); 
 
    for (int i = 0; i < N; ++i) { 
        cin >> strings[i]; 
    } 
 
    // Сортируем строки в соответствии с заданным порядком. 
    sort(strings.begin(), strings.end(), [&](const string& a, const string& b) { 
        int len = min(a.length(), b.length()); 
 
        for (int j = 0; j < len; ++j) { 
            if (a[j] != b[j]) { 
                return order[a[j] - 'a'] < order[b[j] - 'a']; 
            } 
        } 
 
        return a.length() < b.length(); 
    }); 
 
    // Выводим отсортированные строки. 
    for (const string& s : strings) { 
        cout << s << endl; 
    } 
 
    return 0; 
} 

Этот код сначала создает вектор пар, где каждая пара содержит символ и его порядок сортировки. Затем он сортирует порядок сортировки в соответствии с первым символом пары. Далее он считывает строки, которые необходимо отсортировать, и сортирует их, используя заданный порядок.

Пример ввода и вывода в вашем вопросе должны работать с этим кодом.