Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Найти самое длинное и самое короткое слово в русском широкосимвольном тексте

КулХацкер Мыслитель (6840), закрыт 1 год назад
Дан русский широкосимвольный текст типа wchar_t, сохранённый в массиве wtext[512]. Способ формирования массива - произвольный.
Текст, кроме слов, может содержать любые знаки препинания.
Найти самое длинное и самое короткое слово. Результат вывести на консоль. Самым коротким словом можно считать, в том числе, любой предлог или союз.
Лучший ответ
Николай Веселуха Высший разум (360748) 1 год назад
 #include  
#include
#include
#include
#include
using namespace std;
vector words(const wstring& str, const wstring& signs) {
const wregex re{ signs };
const wsregex_token_iterator iter{ str.begin(), str.end(), re, -1 };
return { iter, {} };
}
int main() {
wcout.imbue(locale(".866"));
wcin.imbue(locale(".866"));
const size_t length = 512;
wcout << L"Введите строку: ";
wchar_t wtext[length];
wcin.getline(wtext, length);
const wstring re(LR"([ ,.;:!?-]+)");
const auto box = words(wtext, re);
auto cmp = [](const wstring& a, const wstring& b) {
return a.length() < b.length();
};
const auto& short_word = *min_element(box.begin(), box.end(), cmp);
const auto& long_word = *max_element(box.begin(), box.end(), cmp);
wcout << L"Самое короткое слово: " << short_word << L'\n';
wcout << L"Самое длинное слово: " << long_word << L'\n';
system("pause > nul");
}
Остальные ответы
Евгений Высочин Просветленный (37964) 1 год назад
#include<stdio.h>
#include<wchar.h>
#include<locale.h>
#include<stdlib.h>

int main()
{
wchar_t wtext[512]={0},
minword[25]={0},maxword[25]={0},
*wpos, *filter=L",.:;!? ";

setlocale(LC_ALL, "Russian");
wprintf(L"Введите текст:\n");
fgetws(wtext, sizeof(wtext), stdin);
wtext[wcslen(wtext)-1]=L"\0";
wchar_t *word=wcstok(wtext, filter, &wpos);
wcscpy(minword, word);
wcscpy(maxword, word);

while(word!=NULL)
{
word=wcstok(NULL, filter, &wpos);
if(word==NULL) break;
if(wcslen(minword)>wcslen(word))
wcscpy(minword, word);
if(wcslen(maxword)<wcslen(word))
wcscpy(maxword, word);
}

wprintf(L"\nСамое длинное слово: %ls", maxword);
wprintf(L"\nСамое короткое слово: %ls", minword);
system("pause"); //пауза в Windows
return 0;
}
Похожие вопросы