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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.10.2012, 14:49   #1
xexe73
 
Регистрация: 27.09.2012
Сообщений: 7
По умолчанию Найти самое длинное слово и определить, сколько раз оно встретилось

Помогите решить,завтра сдавать.
xexe73 вне форума Ответить с цитированием
Старый 16.10.2012, 18:17   #2
xexe73
 
Регистрация: 27.09.2012
Сообщений: 7
По умолчанию Найти самое длинное слово и определить, сколько раз оно встретилось

Написал программу,но что-то не работает.
С++
Код:
#include "stdafx.h"
#include <iostream> 
#include <fstream> 
#include <conio.h>
using namespace std;
 
int main() 
{   
    char buffer[100]; 
    int size = 0, max = 0, count = 0;
    char word[20];
    ifstream infile; 
    infile.open("Text.txt"); 
 
    if(!infile.is_open()) 
    cout << "Error  " << std::endl; 
    else  
        while( infile >> buffer) 
        { 
            size = strlen(buffer); 
            if(size > max) 
            { 
                strcpy(word, buffer); 
                count = 1; 
                max = size;
                continue;
            } 
            if(strcmp(word, buffer) == 0)
                count++;
        } 
        infile.close();
        cout <<"Max word " << word << std::endl;
        cout <<"Count "<< count << std::endl;
		_getch();
}

Последний раз редактировалось Stilet; 16.10.2012 в 20:24.
xexe73 вне форума Ответить с цитированием
Старый 16.10.2012, 19:54   #3
ultimatet41
Форумчанин
 
Аватар для ultimatet41
 
Регистрация: 08.04.2012
Сообщений: 104
По умолчанию

У меня сегодня голова не очень варит так что, как то вот так:

Код:
#include <iostream>
#include <fstream>
#include <string>
#include <vector>

using namespace std;

int main() {

	string name;
	int index = 0;
	int count = 0;
	cout << "enter file name: ";
	cin >> name;
	ifstream ist(name.c_str());

	if (!ist) return -1;

	vector<string> text;
	string word;

	while (ist >> word) text.push_back(word);

	for (int i = 0; i < text.size(); i++) {
		if (text[i].size() > text[index].size()) index = i;
	}

	for (int i = 0; i < text.size(); i++) {
		if (text[i].size() == text[index].size()) ++count;
	}
	cout << text[index] << "\n";
	cout << "count: " << count;
	while (cin >>word);
	return 0;


}
ultimatet41 вне форума Ответить с цитированием
Старый 16.10.2012, 20:41   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Предлагаю следующую стратегию:
Код:
    char s[]="123 4567 89";
	char s2[255]; memset(s2,0,255);
	for(char *c=strtok(s," ");c;c=strtok(0," ")){
		if(strlen(c)>strlen(s2)){
			strcpy(s2,c);
		}
	}
	cout<<s2;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.10.2012, 22:16   #5
dotmeer
Пользователь
 
Регистрация: 15.10.2012
Сообщений: 14
По умолчанию

могу подсказать алгоритм:
1) считать из файла (стандартной функцией) весь текст в одну строку
2) разбить строку на подстроки по пробелам
посимвольная проверка в цикле. если пробел, то предыдущие n символов (n надо увеличивать, если символ не пробел) с такого-то индекса (сохранить индекс первого после пробела символа) записать в строку
3) проверить в цикле все подстроки на длину
цикл по массиву слов со вложенным циклом подсчитывающим количество символов в слове. изменять переменную, отвечающую за длину самого длинного слова, если оно найдено
Код:
if(prevLength<length)
   prevLength=length;
попутно увеличивать счетчик длинных слов, сбрасывая его каждый раз, когда находится более длинное слово

дополнительно (мой препод очень любил такие вещи) можно сделать проверку, если длинные слова разные. то есть есть "абырвалГ" и "абырвалК" и следует вывести сколько раз каждое из них встречается в тексте.
dotmeer вне форума Ответить с цитированием
Старый 17.10.2012, 00:35   #6
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

xexe73

Программа которая считывает текст из файла,находит самое длинное слово и определяет сколько раз оно встретилось

Помогите решить,завтра сдавать.


Ну что, подмогнем студню? :D
поскольку преподы сейчас лютуют и требуют решения на русском языке, то специально для них решение на РашенC++ oO

Код:
#включить <ввструя>
#включить <фструя>
#включить <сструя>
#включить <локаль>

#включить <обходчик>
#включить <алгоритм>

#включить <строка>
#включить <мапа>

шаблон <имятипа T>
структура size_greater : общедоступный стд::бинарная_функция<T, T, логич>
{
	логич оператор()(нетрогать T& v1, нетрогать T& v2) нетрогать
	{
		вернуть v1.size() > v2.size();
	}
};

шаблон <имятипа U>
структура assign
{
	шаблон <имятипа T>
	пусто оператор()(нетрогать T& val)
	{
		++u_[val];
	}

	U u_;
	нетрогать U* оператор->() нетрогать { вернуть &u_; }
};

шаблон <имятипа U>
пусто print(нетрогать U& u)
{
	стд::цвых << "Самое длинное слово \"" << u.первый << "\" встретилось " << u.второй << " раз" << стд::конецстр;
}

размер_т count(стд::вхструя& is)
{
	типопр стд::вхструя_обходчик<стд::строка> I;
	print(*стд::для_каждого(I(is), I(), assign<стд::мапа<стд::строка, размер_т, size_greater<стд::строка> > >())->начало());	

	вернуть 0;
}

целый главный()
{
	установитьлокаль(ЛК_ВСЕ, "");	

	стд::вхфструя ifs("words.txt");
	count(ifs);

	вернуть 0;
}
Rififi вне форума Ответить с цитированием
Старый 03.01.2015, 18:40   #7
Chainik!
Форумчанин
 
Регистрация: 10.11.2008
Сообщений: 120
По умолчанию

Цитата:
Сообщение от xexe73 Посмотреть сообщение
Помогите решить,завтра сдавать.
Код:
#include "stdafx.h"
#include "iostream"
#include "conio.h"
using namespace std;
const int n = 100;
int main()
{
	setlocale(LC_ALL, "Rus");
	int count = 0, max = 0;
	char res[n], s[n], *p;
	cout << "Введите строку: ";
	gets(s);
	for(p = strtok(s, " "); p; p = strtok(NULL, " "))
	{
		if(strlen(p) > max)
		{
			max = strlen(p);
			strcpy(res,p);
		}
		if(strstr(p,res))
			count++;
	}
	cout << "\nСамое длинное слово: " << res;
	cout << "\n\nПовторяется в строке: " << count;
	getch();
	return 0;
}
помог - жми на весы
Chainik! вне форума Ответить с цитированием
Старый 03.01.2015, 19:32   #8
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Chainik!, судя по дате топика, ТС уже давно всё "сдал".
Streletz вне форума Ответить с цитированием
Старый 03.01.2015, 19:41   #9
Chainik!
Форумчанин
 
Регистрация: 10.11.2008
Сообщений: 120
По умолчанию

Цитата:
Сообщение от Streletz Посмотреть сообщение
Chainik!, судя по дате топика, ТС уже давно всё "сдал".
Не заметил
помог - жми на весы
Chainik! вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С# найти самое длинное и самое короткое слово в строке и вывести их Зеленый Чай Помощь студентам 4 06.01.2012 18:40
CountFunc(f), которая определяет, сколько раз в файле встретилось слово "function". ArtS Паскаль, Turbo Pascal, PascalABC.NET 3 24.05.2009 19:21
найти самое длинное симметричное слово Си++ xVeteRx Помощь студентам 3 10.04.2009 21:25
Определить сколько раз встречается в тексте самое короткое слово - Delphi 7 Леди Уинтер Помощь студентам 3 08.01.2008 17:56
С++ Найти самое длинное слово строки k0z7_g0b1in Общие вопросы C/C++ 3 22.04.2007 17:37