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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.08.2013, 19:34   #11
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

Код конечно тяжеловат для восприятия, все равно BDA большое спасибо...
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 31.08.2013, 20:43   #12
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

Цитата:
Код конечно тяжеловат для восприятия
в чем тяжеловат?
в мапе по ключу-слову можешь получить счетчик.
Считал новое слово - увеличил счетчик.
Затем он выводит все слова и значения их счетчиков (но по заданию надо вывести слово [или слова?] с наибольшим значением счетчика.

Лично меня напрягают итераторы там где они не особо нужны (в С++11 есть for по коллекции). Ну и с лямбдами я уже наигрался в доволь, поэтому вот:
Код:
int main() {
  istringstream iss("Hello word my name is word Word");
  map<string, int> words;
  string word;
    
  for (;;) {
    if (iss.eof()) break;
    iss >> word;
    ++words[word];
  }
  for (auto t : words) 
    cout << t.first << " - " << t.second << endl;
}
МБ поможет Bugrimov
rrrFer вне форума Ответить с цитированием
Старый 01.09.2013, 22:53   #13
Chainik!
Форумчанин
 
Регистрация: 10.11.2008
Сообщений: 120
По умолчанию

Код:
#include "stdafx.h"
#include "iostream"
#include "conio.h"
using namespace std;
const int n = 100;

int _tmain(int argc, _TCHAR* argv[])
{
	char s[] = "apple green chelsea apple", *res[n];
	cout << s;
	int k = 0;
	res[k] = strtok(s, " ");
	while(res[k])
	{
		k++;
		res[k] = strtok(NULL, " ");
	}
	int count = 0;
	for(int i = 0; i < k; i++)
	{
		bool b = true;
		for(int j = i + 1; j < k; j++)
		{
			if(!strcmp(res[i],res[j]))
				b = false;
		}
		if(!b)
			count++;
	}
	if(count)
		cout << "\n\nKolichestvo slov v stroke: " << count;
	else
		cout << "\n\nNOT FOUND";
	_getch();
	return 0;

}
помог - жми на весы
Chainik! вне форума Ответить с цитированием
Старый 02.09.2013, 08:32   #14
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

Код:
#include "stdafx.h"
#include "iostream"
#include "conio.h"
наверно так

Код:
#include <stdafx.h>
#include <iostream>
#include <conio.h>
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 02.09.2013, 17:51   #15
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

Цитата:
Сообщение от Chainik! Посмотреть сообщение
Код:
#include "stdafx.h"
#include "iostream"
#include "conio.h"
using namespace std;
const int n = 100;

int _tmain(int argc, _TCHAR* argv[])
{
	char s[] = "apple green chelsea apple", *res[n];
	cout << s;
	int k = 0;
	res[k] = strtok(s, " ");
	while(res[k])
	{
		k++;
		res[k] = strtok(NULL, " ");
	}
	int count = 0;
	for(int i = 0; i < k; i++)
	{
		bool b = true;
		for(int j = i + 1; j < k; j++)
		{
			if(!strcmp(res[i],res[j]))
				b = false;
		}
		if(!b)
			count++;
	}
	if(count)
		cout << "\n\nKolichestvo slov v stroke: " << count;
	else
		cout << "\n\nNOT FOUND";
	_getch();
	return 0;

}
Зачем разбивать строку на токены? Ведь можно и без таких затрат обойтись
Igor95 вне форума Ответить с цитированием
Старый 02.09.2013, 18:33   #16
Chainik!
Форумчанин
 
Регистрация: 10.11.2008
Сообщений: 120
По умолчанию

Покажи как это делается!!??
помог - жми на весы
Chainik! вне форума Ответить с цитированием
Старый 02.09.2013, 18:34   #17
Chainik!
Форумчанин
 
Регистрация: 10.11.2008
Сообщений: 120
По умолчанию

Цитата:
Сообщение от Bugrimov Посмотреть сообщение
Код:
#include "stdafx.h"
#include "iostream"
#include "conio.h"
наверно так

Код:
#include <stdafx.h>
#include <iostream>
#include <conio.h>
А есть разница??
помог - жми на весы
Chainik! вне форума Ответить с цитированием
Старый 02.09.2013, 19:06   #18
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

Цитата:
Сообщение от Chainik! Посмотреть сообщение
Покажи как это делается!!??
Вам уже давным-давно привели код для решения этой задачи
Igor95 вне форума Ответить с цитированием
Старый 02.09.2013, 19:22   #19
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,318
По умолчанию

Цитата:
Сообщение от Chainik! Посмотреть сообщение
А есть разница??
В принципе нет, но:
Цитата:
Обычно большинство программистов имена стандартных заголовочных файлов заключают в угловые скобки. А использование кавычек обычно приберегается для имен специальных файлов, относящихся к конкретной программе. Впрочем, твердого и простого правила, по которому кавычки требуется использовать именно таким образом, не существует.
Цитата:
Сообщение от Igor95 Посмотреть сообщение
Вам уже давным-давно привели код для решения этой задачи
Кстати, тут можно еще поспорить, какое решение будет лучшим. Смотря по какому параметру рассматривать (размер кода, размер дополнительной памяти, эффективность).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 02.09.2013, 19:28   #20
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,327
По умолчанию

Цитата:
Сообщение от Chainik! Посмотреть сообщение
Код:
#include "stdafx.h"
#include "iostream"
#include "conio.h"
using namespace std;
const int n = 100;

int _tmain(int argc, _TCHAR* argv[])
{
	char s[] = "apple green chelsea apple", *res[n];
	cout << s;
	int k = 0;
	res[k] = strtok(s, " ");
	while(res[k])
	{
		k++;
		res[k] = strtok(NULL, " ");
	}
	int count = 0;
	for(int i = 0; i < k; i++)
	{
		bool b = true;
		for(int j = i + 1; j < k; j++)
		{
			if(!strcmp(res[i],res[j]))
				b = false;
		}
		if(!b)
			count++;
	}
	if(count)
		cout << "\n\nKolichestvo slov v stroke: " << count;
	else
		cout << "\n\nNOT FOUND";
	_getch();
	return 0;

}
Ваша программа не учитывает знаки препинания.

Input: "apple, apple green chelsea apple chelsea"

Output: 2

В вашей программе можно их перечислить так:
Код:
res[k] = strtok(s, " ,.-");
P.S. Вынесите код вашей программы в отдельную функцию.

Последний раз редактировалось 8Observer8; 02.09.2013 в 19:36.
8Observer8 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подсчитать количество слов в строке Chainik! Общие вопросы C/C++ 31 10.04.2016 01:55
Подсчет одинаковых слов в строке versegg Помощь студентам 0 27.05.2012 19:39
Количество одинаковых слов в строке. Delphi topside Помощь студентам 10 30.10.2011 23:05
Подсчитать количество слов и количество букв MDSIQ Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 13.11.2010 16:57