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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.12.2012, 19:25   #1
КРИЖ
Пользователь
 
Регистрация: 08.03.2011
Сообщений: 44
По умолчанию (С++) поиск слов в строке, которые повторяются

задача состоит в следующем вывести слова из строки и количество их повторений
пример:qwert name help qwert far help help name
вывод слов: qwert повторений 2, name повторений 2, help повторений 3, far повторений 1.
написал программу:
Код:
#include "fstream"
#include "iostream"
#include "cstring"
#include "cctype"
#include "stdafx.h"
#include "iostream"
#include "conio.h"

using namespace std;

int main()
{
	const int size = 256;
	int count=0;//переменная для подсчета повторении слова
	int wordcount=0;//переменная для подсчета количества слов в string
	int n=0;//вспомогательная переменная
	char string[size];
	cout<<"enter the text"<<endl;
	gets(string);//вводим string
	char *colword;//вспомогательная строка для подсчета слов в string
	int l_string=strlen(string);//считываем фактическую длину строки string
	colword=strtok(string," ");
    while (colword!=NULL)
           {
             colword=strtok(NULL," ");
             wordcount++;
           }
	for(int i=0;i<wordcount;i++)//цикл в котором будет к пепеменной word присваеватяс слово от 1 первого до н-го
	{
		for(int j=0;j<l_string;j++)//цикл где объявлятся переменная word и идет пробежка по строке
		{
			char *word= new char[size];
			if(string[j]==' ')//как только string[j]= пробелу то начинается цикл 
			{
				for(int k=n;k<j;k++)// цикл который начинается как только встречается пробел идет копирование строки string в word с n по j-1 символ где j-пробел
				{
					word[j]=string[j];
					n++;//увеличиваем n до символа стоящего до пробела
				}
				n++;//увеличиваем на 1 
				word[n]='\0';//так как в цикле было n скопированных символов то n- норер есть буква а в преведущей строке порядок n был увечичен для того чтоб тут после символа завершит строку
				int l_word=strlen(word);//ищем фактическую длину строки
				char *p = string;
				while(p=strstr(p,word))//ищем слова которые повторяются
				{
					count++;//увеличиваем счетчик повтора на 1 если есть повторяющиеся слово
					char *c=p;
					p +=l_word;
					if(c!=string)
						if(!ispunct(*(c-1)) && !isspace(*(c-1)))
							continue;
					if(ispunct(*p) || isspace(*p) || (*p == '\0'))
						count++;
				}
				cout<<word<<": reps= "<<count<<endl;
				getch();
				count=0;
			}
		}
	}
}
проблема в том что не идет присвоения word для поиска слов.
где и почему не правильно? и как сделать чтоб заработала?
КРИЖ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск и вывод слов со строки которые имеют указанную букву ovner Общие вопросы C/C++ 2 07.10.2012 01:43
string поиск слов в строке SAMOUCHKA Общие вопросы C/C++ 1 18.05.2012 01:15
В строке определить количество слов, которые содержат букву «а» (Delphi) Dark Raven Помощь студентам 2 19.01.2012 16:56
MYSQL запрос, выборать поля, которые повторяются Delphinchik PHP 1 13.02.2011 21:53
Поиск слов в строке Neymexa Общие вопросы C/C++ 3 16.12.2008 18:33