Предмет: Информатика,
автор: Денис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# - ну еще ладно, было бы немного подлиннее. Но в С++... это будет монстр )))
лучше дайте задание
А вот оно: https://znanija.com/task/29292211. Неприятность в том, что ничего не сказано про буквы, поэтому я посчитал, что буквы - это все. что допустимо по условию и при этом не пробелы и не цифры.
Вторая неприятность для С++ - это требование получить отсортированные строки. Именно строки.
Ответы
Автор ответа:
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);
}
//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.
"- Как писать долго, длинно и непонятно? - Использовать С++"
Все зависит от предпочтений, это я ещё писал используя STL, на Си это было бы ещё больше кода
Но писать свои "костыли" всегда интереснее, ведь кто знает, может, именно Вы реализуя свою реализацию пузырьковой сортировки неожиданно для себя, напишите соверешенно новый алгоритм)
Предпочтения - это точно. "один любит арбуз, другой свиной хрящик." (Н.Островский, "Бесприданница")
Замечу, еще, что если кому и интересны "свои костыли", то уж точно не школьнику, котором вся эта информатика обычно "да видал я ее..."
Похожие вопросы
Предмет: Английский язык,
автор: Аноним
Предмет: Физика,
автор: yaoietojizn
Предмет: Другие предметы,
автор: yankampp
Предмет: Математика,
автор: кюннэй1
Предмет: Математика,
автор: vdbanditka