profile
Опубликовано 5 лет назад по предмету Информатика от Денис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.

  1. Ответ
    Ответ дан clinteastwood2
    Незнаю верно ли я все понял, но как вариант можно сделать так
    //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);
    }
    1. Ответ
      Ответ дан Аккаунт удален
      "- Как писать долго, длинно и непонятно? - Использовать С++"
    2. Ответ
      Ответ дан clinteastwood2
      Все зависит от предпочтений, это я ещё писал используя STL, на Си это было бы ещё больше кода
    3. Ответ
      Ответ дан clinteastwood2
      Но писать свои "костыли" всегда интереснее, ведь кто знает, может, именно Вы реализуя свою реализацию пузырьковой сортировки неожиданно для себя, напишите соверешенно новый алгоритм)
    4. Ответ
      Ответ дан Аккаунт удален
      Предпочтения - это точно. "один любит арбуз, другой свиной хрящик." (Н.Островский, "Бесприданница")
    5. Ответ
      Ответ дан Аккаунт удален
      Замечу, еще, что если кому и интересны "свои костыли", то уж точно не школьнику, котором вся эта информатика обычно "да видал я ее..."
Самые новые вопросы