Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.02.2012, 20:51   #1
Mshassium
 
Регистрация: 08.02.2012
Сообщений: 2
Лампочка Задача на строки, 1 курс.

Даны две строки. Получить строку, в которой чередуются слова первой и второй строки. Если в одной из строк число слов больше, чем в другой, то оставшиеся слова зтой строки должны быть дописаны в строку-результат.
Не могу сообразить алгоритм решения. Можно не решать ее а просто дать подсказки! Буду очень признателен!
Mshassium вне форума Ответить с цитированием
Старый 09.02.2012, 01:46   #2
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

1. Продумываем, какие инструменты понадобятся для решения задачи. Например, навскидку: функция, которая умеет искать в большой строке слова. Функция, которая умеет извлекать из строки подстроку, и тп.

2. Конструируем инструменты (ну или пользуемся готовыми: http://www.cplusplus.com/reference/string/string/)

3. Уточняем алгоритм действий: как при помощи имеющихся инструментов получить нужный результат.

4. Профит!

Пример:

На входе: две большие строки.
На выходе: одна большая строка.

Инструменты:
количество ОпределитьКоличествоСлов(строка_ист очник, стартовая_позиция);
Конечная_позиция НайтиСлово(строка_источник, стартовая_позиция);
Добавить в строку подстроку(строка_получатель, строка_источник, стартовая_позиция, конечная позиция);

Алгоритм:
1. Определить количество слов в первой большой строке.
2. Определить количество слов во второй большой строке.
3. Зарезервировать память для большой строки, которая сумеет вместить в себя все данные.
4. Начать цикл: пока в одной из больших строк ещё остаются слова. Иначе: см пункт 5
....4.1 Переключится на первую большую строчку, и вытащить из неё очередное слово
...4.2 Записать это слово в строку_получатель. Переключится на вторую большую строчку.
...4.3 см пункт 4.1
5. Переключится на другую большую строку, и дописать в строку получатель оставшиеся в ней слова .

6. Профит!
_Bers вне форума Ответить с цитированием
Старый 09.02.2012, 03:29   #3
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2Mshassium

Код:
#include <iostream>
#include <iterator>
#include <algorithm>
#include <string>
#include <sstream>

using namespace std;

int main()
{
	string str1;
	string str2;

	getline(cin, str1);
	getline(cin, str2);

	stringstream ss1(str1);
	stringstream ss2(str2);
	stringstream out;

	istream_iterator<string> It1(ss1);
	istream_iterator<string> It2(ss2);
	istream_iterator<string> ItEnd;

	const char *delim = " ";

	while (It1 != ItEnd && It2 != ItEnd) {
		out << *It1++ << delim << *It2++ << delim;
	}

	copy((It1 == ItEnd ? It2 : It1), ItEnd, ostream_iterator<string>(out, delim));

	cout << endl << out.str() << endl;

	return 0;
}
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 09.02.2012, 10:20   #4
Mshassium
 
Регистрация: 08.02.2012
Сообщений: 2
По умолчанию

Цитата:
Сообщение от _Bers Посмотреть сообщение
1. Продумываем, какие инструменты понадобятся для решения задачи. Например, навскидку: функция, которая умеет искать в большой строке слова. Функция, которая умеет извлекать из строки подстроку, и тп.

2. Конструируем инструменты (ну или пользуемся готовыми: http://www.cplusplus.com/reference/string/string/)

3. Уточняем алгоритм действий: как при помощи имеющихся инструментов получить нужный результат.

4. Профит!

Пример:

На входе: две большие строки.
На выходе: одна большая строка.

Инструменты:
количество ОпределитьКоличествоСлов(строка_ист очник, стартовая_позиция);
Конечная_позиция НайтиСлово(строка_источник, стартовая_позиция);
Добавить в строку подстроку(строка_получатель, строка_источник, стартовая_позиция, конечная позиция);

Алгоритм:
1. Определить количество слов в первой большой строке.
2. Определить количество слов во второй большой строке.
3. Зарезервировать память для большой строки, которая сумеет вместить в себя все данные.
4. Начать цикл: пока в одной из больших строк ещё остаются слова. Иначе: см пункт 5
....4.1 Переключится на первую большую строчку, и вытащить из неё очередное слово
...4.2 Записать это слово в строку_получатель. Переключится на вторую большую строчку.
...4.3 см пункт 4.1
5. Переключится на другую большую строку, и дописать в строку получатель оставшиеся в ней слова .

6. Профит!
Огромное спасибо! То , что нужно, во всем разобрался!
ЗЫ pproger спасибо за код, все отлично работает, просто я многое не понял в нем, знаний не хватает, а именно еще не проходили библиотеки <iterator> и <algorithm>!!!

Последний раз редактировалось Mshassium; 09.02.2012 в 10:23.
Mshassium вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача 2-ой курс. Molodoy hacker Помощь студентам 5 26.02.2011 10:31
Геометрическая задача!!! (1 курс, дельфи) Movek Помощь студентам 1 03.10.2010 19:21
Странная задача С. I курс. EniOk Общие вопросы C/C++ 19 22.06.2009 00:45
Задача С на курс вают ProgramerBeatz Общие вопросы C/C++ 3 08.06.2009 02:46
Не вижу ошибку...помогите. 1 курс задача на Си good_andy Помощь студентам 6 02.01.2008 10:01