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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.10.2011, 23:29   #1
Nastyulka
Новичок
Джуниор
 
Регистрация: 20.10.2011
Сообщений: 1
Радость Задача по С++ (string)

Задание:
Дана текстовая строка. Распечатать из нее все слова, имеющие наименьшую и наибольшую длину.

Очень нужно сегодня, завтра уже сдавать! Буду безумно благодарна тому кто поможет
Nastyulka вне форума Ответить с цитированием
Старый 21.10.2011, 00:59   #2
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

Nastyulka

Дана текстовая строка. Распечатать из нее все слова, имеющие наименьшую и наибольшую длину.
Очень нужно сегодня, завтра уже сдавать! Буду безумно благодарна тому кто поможет


Вот, порази препода своими знаниями!
Он наверное думает что ты - обычная бландинка, и не ожидает серьезного сопротивления.
На самом деле, он ещё об этом не знает, но завтра его ждёт жестокий облом ((((((Ж

Код:
#include <iostream>
#include <locale>

#include <time.h>

#include <string>
#include <vector>
#include <sstream>

#include <algorithm>
#include <functional>
#include <iterator>

struct R
{
	char operator()() const
	{
		return rand() % ('Z' - 'A' + 1) + 'A';
	}
};

template <typename _Pred>
struct length : public std::binary_function<std::string, std::string, bool>
{
	bool operator()(const std::string& left, const std::string& right) const
	{
		return _Pred()(left.length(), right.length());
	}
};

struct eq : public std::unary_function<std::string, bool>
{
	eq(size_t len) : len_(len) {};

	bool operator()(const std::string& s) const
	{
		return s.length() == len_;
	}

	size_t len_;
};


template <typename _Pred>
std::string select(const std::string& text)
{
	std::stringstream ss(text);
	std::string word;

	typedef std::vector<std::string> V;
	V v;

	while (ss >> word)
		v.push_back(word);

	ss.str("");
	ss.clear();

	typedef std::ostream_iterator<V::value_type> O;	
	std::remove_copy_if(v.begin(), v.end(), O(ss, " "), std::not1(eq(std::min_element(v.begin(), v.end(), length<_Pred>())->length())));

	return ss.str();
}

std::string generate()
{
	std::stringstream ss;

	const size_t words = rand() % 12 + 5;
	for (size_t i=0; i<words; i++)
	{
		std::string s(rand() % 6 + 4, ' ');
		std::generate(s.begin(), s.end(), R());
		ss << s << " ";
	}

	return ss.str();
}

int main()
{
	setlocale(LC_ALL, "");
	srand((unsigned) time(NULL));

	const std::string s = generate();

	std::cout << "Original: " << s << std::endl;
	std::cout << "Min: " << select<std::less<size_t> >(s) << std::endl;
	std::cout << "Max: " << select<std::greater<size_t> >(s) << std::endl;

	return 0;
}
Пример работы: http://codepad.org/7gq093kG
Rififi вне форума Ответить с цитированием
Старый 21.10.2011, 02:54   #3
An1ka
C++,DirectX/OpenGL
Форумчанин
 
Регистрация: 09.01.2011
Сообщений: 422
По умолчанию

Для C++ 0x, ввести строку через пробелы
Код:
#include <iostream>
#include <algorithm>
#include <string>
#include <list>
#include <iterator>

int main( int argc, const char* argv[]) {
	std::list< std::string> list_s;
	std::string str;
	std::cout << "Enter string: ";
	getline( std::cin, str);
	std::string::iterator i_begin, i_end = str.begin();
	do {
		if ( *(i_begin = i_end) == ' ') { ++i_end; continue; }
		i_end = std::find( i_begin, str.end(), ' ');
		std::string str( i_begin, i_end);
		list_s.push_back( str);
	}
	while ( i_end != str.end());
	std::ostream_iterator< std::string> O_I( std::cout, " ");
	list_s.sort( []( std::string& s1, std::string& s2) { return s1.size() < s2.size();} );
	std::cout << "Minimum: ";
	std::copy_if( list_s.begin(), list_s.end(), O_I,
		[&list_s]( std::string& s) { return s.size() == list_s.begin()->size();});
	std::cout << std::endl << "Maximum: ";
	std::copy_if( list_s.begin(), list_s.end(), O_I,
		[&list_s]( std::string& s) { return s.size() == list_s.rbegin()->size();});
	return 0;
}
An1ka вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
string-char-wchar_t-char-string чето потерял magog7 Общие вопросы C/C++ 0 08.08.2011 20:21
String Antimag Общие вопросы C/C++ 1 03.12.2010 10:06
String большого размера, более 255 String[255] bitSoft Общие вопросы Delphi 9 28.03.2010 19:45
Как получить адрес String строки или преобразовать String madboy4ik Общие вопросы по Java, Java SE, Kotlin 6 15.01.2010 11:57
string BLADEE Помощь студентам 4 29.10.2009 16:29