Предмет: Информатика, автор: Денис88

Даны две строки символов, состоящих из цифр, букв и пробелов. Группу символов, не содержащих пробелов внутри себя, будем называть словами. Составить программу переформирования строк так, чтобы в первой строке располагались слова, начинающиеся с цифр, в порядке их возрастания, а во второй – слова, начинающиеся с букв, в алфавитном порядке.
Перевести из PASCAL в С++

begin
  var s1:=ReadlnString('Строка 1:');
  var s2:=ReadlnString('Строка 2:');
  var s:=(s1+' '+s2).ToWords;
  s1:=s.Where(t->t[1] in ['0'..'9']).OrderBy(t->t).JoinIntoString;
  s1.Println;
  s2:=s.Where(t->not(t[1] in ['0'..'9'])).OrderBy(t->t).JoinIntoString;
  s2.Println
end.


Аноним: Если бы в C# - ну еще ладно, было бы немного подлиннее. Но в С++... это будет монстр )))
clinteastwood2: лучше дайте задание
Аноним: А вот оно: https://znanija.com/task/29292211. Неприятность в том, что ничего не сказано про буквы, поэтому я посчитал, что буквы - это все. что допустимо по условию и при этом не пробелы и не цифры.
Аноним: Вторая неприятность для С++ - это требование получить отсортированные строки. Именно строки.

Ответы

Автор ответа: clinteastwood2
1
Незнаю верно ли я все понял, но как вариант можно сделать так
//Microsoft (R) C/C++ Optimizing Compiler Version 19.00.23506 for x64

#include <iostream>
#include <string>
#include <sstream>
#include <vector>
#include <iterator>
#include <algorithm>

bool DigitFirst(const std::string& rhs, const std::string& lhs)
{
    if (isdigit(rhs[0]) || isdigit(lhs[0]))
        return rhs < lhs;
}

bool LetterFirst(const std::string& rhs, const std::string& lhs)
{
    if (isalpha(rhs[0]) || isalpha(lhs[0]))
        return rhs < lhs;
}

const std::string TrueSort(std::string str, bool(*comparator)(const std::string&
rhs, const std::string& lhs))
{
    std::stringstream ss(str);
    std::vector<std::string> vstr(std::istream_iterator<std::string>(ss), {});
    std::sort(vstr.begin(), vstr.end(), comparator);
    ss.clear();
    std::copy(vstr.begin(), vstr.end(), std::ostream_iterator<std::string>(ss, " "));
    return ss.str();
}

int main()
{
    std::string first  = "position total 12345 2jz asd512fgh";
    std::string second = "year 10010 2018r r98k hello";
    std::cout << TrueSort(first,  DigitFirst ) << std::endl;
    std::cout << TrueSort(second, LetterFirst);
}

Аноним: Я сразу сказал - монстр допотопный)))). 32 строки вместо 9.
Аноним: "- Как писать долго, длинно и непонятно? - Использовать С++"
clinteastwood2: Все зависит от предпочтений, это я ещё писал используя STL, на Си это было бы ещё больше кода
clinteastwood2: Но писать свои "костыли" всегда интереснее, ведь кто знает, может, именно Вы реализуя свою реализацию пузырьковой сортировки неожиданно для себя, напишите соверешенно новый алгоритм)
Аноним: Предпочтения - это точно. "один любит арбуз, другой свиной хрящик." (Н.Островский, "Бесприданница")
Аноним: Замечу, еще, что если кому и интересны "свои костыли", то уж точно не школьнику, котором вся эта информатика обычно "да видал я ее..."
Похожие вопросы
Предмет: Математика, автор: Аноним
Предмет: Математика, автор: iamsonya25
Предмет: Математика, автор: кюннэй1
Предмет: Математика, автор: vdbanditka