Регистрация
15 Окт 2013
Сообщения
81
Репутация
0
Спасибо
0
Монет
0
1. Дана строка длиной не более 100 символов. Сделать все гласные буквы в ней заглавными.



2. Дан файл, содержащий русский текст, размер текста не превышает 10 К байт. Найти в тексте N (N ≤ 100) самых длинных слов, оканчивающихся заданной буквой. Записать найденные слова в текстовый файл в порядке не возрастания длины. Все найденные слова должны быть разными. Число N вводить из файла.
 
Задача 1
#include <bits/stdc++.h>//это включает в себя йострим, стринг, вектор, сэт и всё, что тебе только нужно
using namespace std;
int main(){
string s;
cin >> s;
for(int i = 0; i < s.size(); i++){
if(s == 'a'){
s = 'A';
}
else if(s == 'e'){
s = 'E';
}
else if(s == 'i'){
s = 'I';
}
if(s == 'o'){
s = 'O';
}
else if(s == 'u'){
s = 'U';
}
}
cout << s;
return 0;
}
Задача 2
Вводишь всё в сэт, дальше заводишь цикл фор до N, ищешь самое большое слово, удаляешь его из сэта. То есть N раз с помощью цикла вводишь слово в вектор стрингов, а каждое вводимое слово удаляешь в сэте. Ну и выводишь вектор. Я пишу с телефона, поэтому не могу написать код, он будет длинный.
 
Вопрос №1.
#include <iostream>
#include <string>
using namespace std;

int main() {
string s;
cin >> s;
for (int i = 0; i < s.length(); i++) {
if (s == 'a' || s == 'e' || s == 'i' || s == 'o' || s == 'u') s = s - 32;
}
cout<<s;
return 0;
}

Вопрос №2.
Заводишь цикл while, который будет считывать из файла по одному слову, пока тот не закончится (аналогично while(cin >> string)).

Заводишь сет из строк: set<string> s;

Далее внутри этого цикла для каждого слова: Проверяешь, оканчивается ли оно на нужную букву: word[word.length()-1] == 'n' например. Если да, оканчивается, то проверяешь, если ли это слово в сете: s.count(word) вернёт 0, если слова нет, и 1 если есть. Если слово есть в сете, то ничего не делаешь и цикл просто продолжит перебирать слова. Если такого слова ещё нет, то:Если длина сета s.size() меньше 10, то вставляешь это слово в сет: s.insert(word). Если длина сета равна 10, то:Находишь самое короткое слово в нём командой *s.begin(). Если это слово длиннее нашего нового слова word, то ничего не делаем (можно сравнивать просто с помощью знаков больше-меньше). Если наше слово оказалось длиннее, то вставляем его в сет вместо этого самого короткого: *s.begin() = word;Таким образом цикл while найдет 10 самых длинных слов в тексте, оканчивающихся на определённую букву. После цикла while выводим все элементы сета:
for (string x: s) {
cout << x << " " << "\n";
}

Стоит заметить, что решение второй задачи довольно трудоёмкое и при большом размере входного файла с текстом может потребовать очень большого времени для выполнения. Возможно можно как-либо ускорить данный процесс, но вообще проще и быстрее решать подобные задачи на Питоне.
 
"Ирин Стреманов" - это говномошенник. Он давно ошивается на этом сайте. Сейчас мы его удалим. Если увидите его снова, то пожалуйтесь модератору или мне. Его можно найти по одинаковым женским фоткам и тупым вопросам: «Вам сейчас сделать? Вам развёрнуто решить? С рисунком делать? Вам полное решение? ». Если он Вас уже обманул, то можно полицейским сообщить его номер телефона в Туле +79065319765

, и его быстро найдут.
875a8375f91de049494d6073098e8a2f_46df442bcd890fe2d7c325ed7bfd7e89.jpg

 
Назад
Сверху