Даны две строки символов, состоящих из цифр, букв и пробелов. Группу символов, не...

0 голосов
90 просмотров
Даны две строки символов, состоящих из цифр, букв и пробелов. Группу символов, не содержащих пробелов внутри себя, будем называть словами. Составить программу переформирования строк так, чтобы в первой строке располагались слова, начинающиеся с цифр, в порядке их возрастания, а во второй – слова, начинающиеся с букв, в алфавитном порядке.
Перевести из 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.

Информатика (43 баллов) | 90 просмотров
0

Если бы в C# - ну еще ладно, было бы немного подлиннее. Но в С++... это будет монстр )))

0

лучше дайте задание

0

А вот оно: https://znanija.com/task/29292211. Неприятность в том, что ничего не сказано про буквы, поэтому я посчитал, что буквы - это все. что допустимо по условию и при этом не пробелы и не цифры.

0

Вторая неприятность для С++ - это требование получить отсортированные строки. Именно строки.

Дан 1 ответ
0 голосов

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

#include
#include
#include
#include
#include
#include

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 vstr(std::istream_iterator(ss), {});
    std::sort(vstr.begin(), vstr.end(), comparator);
    ss.clear();
    std::copy(vstr.begin(), vstr.end(), std::ostream_iterator(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;<br>    std::cout << TrueSort(second, LetterFirst);<br>}

(4.2k баллов)
0

Я сразу сказал - монстр допотопный)))). 32 строки вместо 9.

0

"- Как писать долго, длинно и непонятно? - Использовать С++"

0

Все зависит от предпочтений, это я ещё писал используя STL, на Си это было бы ещё больше кода

0

Но писать свои "костыли" всегда интереснее, ведь кто знает, может, именно Вы реализуя свою реализацию пузырьковой сортировки неожиданно для себя, напишите соверешенно новый алгоритм)

0

Предпочтения - это точно. "один любит арбуз, другой свиной хрящик." (Н.Островский, "Бесприданница")

0

Замечу, еще, что если кому и интересны "свои костыли", то уж точно не школьнику, котором вся эта информатика обычно "да видал я ее..."