Всем доброго времени суток, есть такое задание
Цитата:
написать консольное приложение, которое будет работать с последовательностями слов. Вывести "меню" на экран
какие действия должна выполнять:
1) создание последовательности
2)объединение двух последовательностей
3) распечатать последов. в прямом и обратном порядках
4) посчитать сколько элементов в последоват
5) найти слово в последовательности (сказать на каком месте, если слов несколько, выдать все номера)
6) добавить слово к последовательности
7) удалить слово из послед (если слов несколько, программа должна спросить какое именно удалять)
8)замена одного слова на другое (если несколько, спросить какое)
9)вставить слово (если много, опять спросить какое именно)
10)узнать упорядоченный ли список
11) упорядочить последов.
все эти функции должны быть рекурсивными
|
Все ок, все функции сделал, все готово, но вот с рекурсией проблема
Факториал там вычислить рекурсионно и все такое прочее я понимаю как
Но как сделать обычную функцию вывода на экран всякого барахла например рекурсивной?
Подскажите пожалуйста, заранее спасибо
Код:
#include <vector>
#include <algorithm>
#include <iterator>
#include <string>
#include <iostream>
#include <utility>
using namespace std;
class Sequence{
public:
void print();
void print_reverse();
void add(string);
void combine(Sequence);
vector <int> find(string);
void swap(string, string);
void del(string);
void sortSeq();
int size();
Sequence();
private:
vector <string> seq;
vector <string>::iterator end, begin, cur;
};
Sequence::Sequence() {
}
void Sequence::sortSeq() {
sort(seq.begin(), seq.end());
}
void Sequence::swap(string swapstring, string swapstring2) {
vector <int> count = find(swapstring);
cout << "Модуль замены слова в последовательности " << endl;
int a, b=count[0];
if (count.size() == 0) cout << "Совпадений не найдено " << endl;
if (count.size() == 1) {
seq.insert(seq.begin()+b, swapstring2);
seq.erase(seq.begin()+b+1);}
if (count.size() > 1) {
cout << "Совпадений больше 1, введите номер записи, которую хотите заменить" << endl;
cin >> a;
seq.insert(seq.begin()+a-1, swapstring2);
seq.erase(seq.begin()+a);
}
}
void Sequence::del(string delstring) {
vector <int> count = find(delstring);
cout << "Модуль удаления слова из последовательности " << endl << endl;
int a;
int b=count[0];
if (count.size() == 0) cout << "Совпадений не найдено " << endl;
if (count.size() == 1)
seq.erase(seq.begin()+b);
if (count.size() > 1) {
cout << "Совпадений больше 1, введите номер записи, которую хотите удалить" << endl;
cin >> a;
seq.erase(seq.begin()+a-1);
}
}
int Sequence::size() {
cout << "--------------------------------------------------------------------" << endl;
cout << "Модуль вычисления размера последовательности " << endl << endl;
cout << "Размер последовательности: " << seq.size() << endl;
return seq.size();
cout << endl;
}
void Sequence::combine(Sequence two) {
for (cur = two.seq.begin(); cur != two.seq.end(); cur++) {
seq.push_back(*cur);
}
}
void Sequence::print() {
cout << "--------------------------------------------------------------------" << endl;
cout << "Модуль вывода последовательности " << endl << endl;
int count = 1;
for (cur = seq.begin(); cur != seq.end(); cur++) {
cout << "Элемент последовательности #" << count << ": " << *cur << endl;
count++;
}
cout << endl;
}
void Sequence::print_reverse() {
cout << "--------------------------------------------------------------------" << endl;
cout << "Модуль вывода последовательности в обратном порядке " << endl << endl;
int count = seq.size();
for (int i=seq.size()-1; i >= 0; i--) {
cout << "Элемент последовательности #" << count << ": " << seq[i] << endl;
count--;
}
cout << endl;
}
void Sequence::add(string str) {
seq.push_back(str);
}
vector <int> Sequence::find(string findstr) {
cout << "--------------------------------------------------------------------" << endl;
cout << "Модуль поиска слова " << findstr << " в последовательности " << endl << endl;
vector <int> numbers;
vector <string> strings;
int i=0,count=0;
for (cur = seq.begin(); cur != seq.end(); cur++) {
if (*cur == findstr) {
cout<< "Слово " << findstr << " найдено на месте под номером " << i+1 << endl;
count++;
numbers.push_back(i);
}
i++;
}
cout << endl;
return numbers;
}