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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.06.2010, 18:14   #1
robert19
Новичок
Джуниор
 
Регистрация: 01.06.2010
Сообщений: 2
По умолчанию

Задание:

Дана последовательность, содержащая от 1 до 30 слов, в каждом из которых от 1 до 5 строчных латинских букв; между соседними словами – запятая, за последним словом точка. Напечатать все различные слова, указав для каждого из них число его вхождений в последовательность.(Пример: Рота, рот, задрот. Слово "рот" встречается 3 раза.)

вот пол кода.

Код:
#include<stdio.h>
#include<string>
int main(){
 char mas[185];
 char mas2[30][7];
 printf("Vvedite posledovatelnost: ");
 gets(mas);
 int i,j,k,l;
 for(i=0;mas[i]!='.';i++){
  l=0;
  if ((mas[i-1]==',')||(i==0)){
   k=0;
   for(j=i;((mas[j]!=',')&&(mas[j]!='.'));j++){
    mas2[l][k]=mas[j];
    printf("%c",mas2[l][k]);
    k++;
   }
   printf("\n");
  }
  l++;
 }
 for(i=0;i<30;i++){
  for(j=0;(mas2[i][j]!='\0');j++){
   for(k=0;(mas[k]!='\0');k++){
    
   }
 }
 return 0;
}
Не могу организовать число вхождений в последовательность. Может поможите???

Последний раз редактировалось Stilet; 02.06.2010 в 08:43.
robert19 вне форума Ответить с цитированием
Старый 01.06.2010, 23:43   #2
ozo
Форумчанин
 
Аватар для ozo
 
Регистрация: 26.04.2010
Сообщений: 328
По умолчанию

Код:
#include <fstream>
#include <iostream>
#include <string>
#include <iterator>
#include <map>
#include <sstream>

int main(){
    std::string        buffer;
    std::ifstream      file("test.file");
    buffer.assign( std::istream_iterator< char >( file ), std::istream_iterator< char >() );
    file.close();
    std::string::size_type findPos;
    while( ( findPos = buffer.find( ',' ) ) != std::string::npos )
	buffer[ findPos ] = ' ';
    if( ( findPos = buffer.find('.') ) != std::string::npos )
	buffer.erase( findPos, buffer.length() );
    std::cout << buffer << '\n';
    std::istringstream sstream( buffer );
    std::map< std::string, int > words;
    std::string tmp;
    while( !sstream.eof() ){
	sstream >> tmp;
	int count = 0;
	findPos = -1;
	do{
	    ++findPos;
	    findPos = buffer.find( tmp, findPos );
	    ++count;
	} while( buffer.find( tmp, findPos + 1 ) != std::string::npos );

	if( words.find( tmp ) == words.end() )
	    words.insert( std::make_pair( tmp, count ) );
    }
    for( std::map< std::string, int >::const_iterator i = words.begin()
	     ; i != words.end(); ++i )
	std::cout << i->first << " : " << i->second << '\n';
}
PS : я курю только табак
Используй гугль, будь счастлив
hackme@yandex.ru
Блог об archlinux

Последний раз редактировалось ozo; 02.06.2010 в 00:56.
ozo вне форума Ответить с цитированием
Старый 02.06.2010, 08:13   #3
robert19
Новичок
Джуниор
 
Регистрация: 01.06.2010
Сообщений: 2
По умолчанию

Спасибо чувак))))
robert19 вне форума Ответить с цитированием
Старый 02.06.2010, 08:35   #4
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Я даже не знаю, что более жестоко - посылать несознательных граждан лесом (а тут вроде ТС даже более-менее сознательный, хотя в неформатированном коде не разбирался, потому точно не скажу) или так над ними издеваться?
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 02.06.2010, 09:21   #5
ozo
Форумчанин
 
Аватар для ozo
 
Регистрация: 26.04.2010
Сообщений: 328
По умолчанию

Код:
int count( char *str, const char * const word ){
    int Count = 0;
    for(int wordLength = std::strlen( word ); *str; ++str )
	if( !std::strncmp( str, word, wordLength ) )
	    ++Count;
    return Count;
}
функция считает кол-во вхождений word в строку str, тебе осталось только слова правильно вырезать( мне лень возится с strcpy() и прочим мраком )
Используй гугль, будь счастлив
hackme@yandex.ru
Блог об archlinux

Последний раз редактировалось ozo; 02.06.2010 в 09:40.
ozo вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сгенерировать рандомом последовательность, по заданной формуле, если 1ое число известно! Алексей_xXx Помощь студентам 2 24.05.2009 16:40
Получить последовательность bi....bn из нулей и едениц,в которой bi=1, когда в i-ой строке число символов R_A_M_I_L7777777 Помощь студентам 3 19.05.2009 16:03
Подсчитать кол-во вхождений символа Си++ Alexion124 Помощь студентам 9 05.01.2009 00:03
Из двух натуральных чисел, составить наибольшее число, сохраняя первоначальную последовательность.Паскаль Omedus Помощь студентам 8 19.11.2007 22:02