
Программа нужна на C++, без использования string. Если получится написать код максимально кратко,
буду благодарен вдвойне. Дано предложение. Напечатать все его слова, предварительно преобразовав каждое из них по следующему правилу:в самом длинном слове удалить среднюю (средние) буквы. Принять, что такое слово — единственное.В задаче принять, что: в рассматриваемом предложении нет начальных и конечных пробелов и символов "-"; количество слов в предложении не превышает 10.

Ответы на вопрос

Ответ:
#include <iostream>
#include <cstring>
#include <list>
using namespace std;
char* delItem(char* str, size_t n)
{
int len = strlen(str)-n;
if(len>0)
memmove(str+n, str+n+1, len);
return str;
}
int main()
{
list <char*> words;
int maxL = 0;
char st[] = "fdfd hgf jhgf.jhgf,jytf juyhg1fhgft jhgf hgfhgfh hgfhgf";
char razd[] = " ,.";
for (char *p = strtok(st, razd); p != NULL; p = strtok(NULL, razd))
{
words.push_back(p);
if(maxL < strlen(p))
maxL = strlen(p);
}
for (char* n : words)
{
if(strlen(n) == maxL)
{
if(strlen(n)%2 == 0)
{
int delIndex = strlen(n)/2-1;
for(int i=0; i<2; i++)
n = delItem(n,delIndex);
}
else
{
n=delItem(n,int(strlen(n)/2));
}
}
cout<<n<<endl;
}
system("PAUSE");
}
Объяснение:




Конечно, вот программа на C++, которая выполняет указанные действия:
cpp#include <iostream>
#include <cstring>
int main() {
char sentence[100];
std::cout << "Введите предложение: ";
std::cin.getline(sentence, sizeof(sentence));
char *words[10];
int wordCount = 0;
// Разбиение предложения на слова
char *token = strtok(sentence, " ");
while (token != nullptr && wordCount < 10) {
words[wordCount++] = token;
token = strtok(nullptr, " ");
}
// Нахождение самого длинного слова
int maxLength = 0;
char *longestWord = nullptr;
for (int i = 0; i < wordCount; ++i) {
int length = strlen(words[i]);
if (length > maxLength) {
maxLength = length;
longestWord = words[i];
}
}
// Удаление средних букв из самого длинного слова
int midIndex = maxLength / 2;
if (maxLength % 2 == 0) {
// Если длина четная, удаляем две средние буквы
memmove(longestWord + midIndex, longestWord + midIndex + 2, maxLength - midIndex);
} else {
// Если длина нечетная, удаляем одну среднюю букву
memmove(longestWord + midIndex, longestWord + midIndex + 1, maxLength - midIndex);
}
// Вывод преобразованных слов
for (int i = 0; i < wordCount; ++i) {
std::cout << words[i] << " ";
}
return 0;
}
Примечание:
- В программе предполагается, что ввод не будет содержать символов "-" и начальных/конечных пробелов.
- Программа использует функции из библиотеки
<cstring>
, такие какstrtok
,strlen
иmemmove
, для работы со строками без использованияstd::string
. - Пожалуйста, учтите, что данная программа не обрабатывает ситуации, когда в самом длинном слове всего одна или две буквы, так как в этом случае у нас не останется символов после удаления средних букв.


Похожие вопросы







Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili