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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.07.2010, 19:53   #1
Darknes
Пользователь
 
Аватар для Darknes
 
Регистрация: 28.06.2010
Сообщений: 40
Вопрос Строки в массиве

Дана последовательность от 1 до 30 слов к каждом слове от 1 до 5 латинских букв после каждого слова зяпатая в конце точка напечатать все слова которые встречаются по 1 разу.
Вопрос что бы слова встречались по 1 разу надо делать сдвиг влево???
Darknes вне форума Ответить с цитированием
Старый 01.07.2010, 20:04   #2
mMAg
Форумчанин
 
Аватар для mMAg
 
Регистрация: 11.08.2009
Сообщений: 433
По умолчанию

Лучше выкинуть одну из цепочек в ДНК...

Ответ: не нужно делать сдвиг влево.
mMAg вне форума Ответить с цитированием
Старый 01.07.2010, 21:46   #3
Darknes
Пользователь
 
Аватар для Darknes
 
Регистрация: 28.06.2010
Сообщений: 40
По умолчанию

Народ а как тогда удалить те слова которые повторяются???
Darknes вне форума Ответить с цитированием
Старый 01.07.2010, 22:02   #4
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Как вариант - сортируете слова по произвольному вменяемому алгоритму (например, по алфавиту), находите уникальные по методу "если и слева и справа элемент отличный от данного, то данный встречается один раз", затем - по принципу "А как же ты тогда расслабляешься? - Да я и не напрягаюсь." Т.е. ничего не удаляете, а просто печатаете слова, встретившиеся один раз, на встречающиеся многократно просто забиваете болт.
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 01.07.2010, 22:46   #5
sever-42
Пользователь
 
Регистрация: 22.04.2010
Сообщений: 96
По умолчанию

Или можно так, создать массив переменных типа
Код:
struct {
char word[80];
int count;
};
при проходе строки отделять каждое слово и сравнивать/добавлять слово в массив, если такое слово есть то ++count. Потом вывести все которые count == 1;
Хотя с сортировкой проще и быстрее
include <Qt>

Последний раз редактировалось sever-42; 01.07.2010 в 22:49.
sever-42 вне форума Ответить с цитированием
Старый 01.07.2010, 22:50   #6
Darknes
Пользователь
 
Аватар для Darknes
 
Регистрация: 28.06.2010
Сообщений: 40
По умолчанию

я конечно извеняюсь но можно код поподробние
Darknes вне форума Ответить с цитированием
Старый 02.07.2010, 00:04   #7
ozo
Форумчанин
 
Аватар для ozo
 
Регистрация: 26.04.2010
Сообщений: 328
По умолчанию

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

int main(){
    std::string str("olo,ololo,olo.asdasd");
    str.erase( str.find('.') );
    for( int i = 0; i < str.length(); ++i )
	if( str[i] == ',' )
	    str[i] = ' ';
    std::istringstream sstream( str );
    std::set< std::string > words;
    words.insert( std::istream_iterator< std::string >( sstream )
		  , std::istream_iterator< std::string >() );
    std::copy( words.begin(), words.end(), std::ostream_iterator< std::string >( std::cout, "\n" ) );
}
Ня !
Используй гугль, будь счастлив
hackme@yandex.ru
Блог об archlinux

Последний раз редактировалось ozo; 02.07.2010 в 00:13.
ozo вне форума Ответить с цитированием
Старый 02.07.2010, 01:22   #8
sever-42
Пользователь
 
Регистрация: 22.04.2010
Сообщений: 96
По умолчанию

Код:
#include <iostream>
using namespace std;

struct m_w {
	char word[20];
	int count;
	m_w() : count(0) {*word = '\0';}
};

int main(int argc, char *argv[])
{
	int i, j, count_w, i_w;
	m_w word[20];
	char str[80] = "bbb,ddd,aaa,ccc,aaa,ccc.";
	char buf[20];

	count_w = 0;
	j = 0;
	for (i = 0; str[i]; ++i) {
		buf[j++] = str[i];
		if (str[i] == ',' || str[i] == '.') {
			buf[j-1] = '\0';
			for (i_w = 0; i_w <= count_w; ++i_w) {
				if (!strcmp(buf, word[i_w].word)) {
					word[i_w].count++;
					j = 0;
					break;
				}
				else if (!word[i_w].count) {
					strcpy(word[i_w].word, buf);
					word[i_w].count++;
					count_w++;
					j = 0;
					break;
				}
			}
		}	
	}
	for (i = 0; word[i].count; ++i)
		if (word[i].count == 1)
			cout << word[i].word << endl;
	return 0;
}
плохая задумка...
include <Qt>
sever-42 вне форума Ответить с цитированием
Старый 02.07.2010, 01:44   #9
ozo
Форумчанин
 
Аватар для ozo
 
Регистрация: 26.04.2010
Сообщений: 328
По умолчанию

А теперь давайте так, сколько вы это писали по времени( в сумме ) и с какого раза оно заработало ?
Используй гугль, будь счастлив
hackme@yandex.ru
Блог об archlinux
ozo вне форума Ответить с цитированием
Старый 02.07.2010, 01:59   #10
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от ozo Посмотреть сообщение
А теперь давайте так, сколько вы это писали по времени( в сумме ) и с какого раза оно заработало ?
Честно говоря, никогда не понимал этих ваших понтов, касательно STL, ясно же, что человеку нужно сделать самостоятельно(вручную). Если вы обратили внимание, тема - "Строки в массиве", а не "Потоки, множества и итераторы". Никоим образом не хочу вас обидеть, но просто не понимаю этого )
netrino вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
3. Вывести номер строки наименьшего элемента в двумерном массиве zebatic Помощь студентам 1 11.06.2010 00:14
Как можно обратиться к элементу строки в двумерном массиве ? fermerius Помощь студентам 1 06.02.2010 19:14
Как найти в двумерном массиве МАХ элемент каждой строки? Jasper92 Общие вопросы C/C++ 9 16.12.2009 12:58
Строки в Двухмерном массиве Pascal program123 Помощь студентам 3 05.06.2009 22:21
Как удалить строки и столбцы в массиве ЛесенОК Свободное общение 1 31.01.2009 18:35