Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вырезать из строки слова, встречающиеся более двух раз 
V
    Опции темы
Metalex
Дата 12.11.2009, 00:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 635
Регистрация: 22.10.2008
Где: Украина-ZPсity

Репутация: нет
Всего: нет



ок займусь оптимизацией кода.


--------------------
Don't let the system get you down.
PM WWW ICQ Skype   Вверх
Metalex
Дата 12.11.2009, 01:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 635
Регистрация: 22.10.2008
Где: Украина-ZPсity

Репутация: нет
Всего: нет



Код
#include<iostream>
#include<string> //strlen

using namespace std;

int main()
{
int i, j, elem_i=0, elem_j=0, n, number=0;

std::cout<<"Vvedite tseloe n - kolishestvo vashih simvolov\n";
std::cin>>n;

char *str;
str=new char [n+1];

cin>>str;

int **word;
word=new int*[n];

for (i=0; i<(strlen(str)+1); i++)
{
    if ((str[i]==' ')||(str[i]=='\0'))
    {
        if ((str[i-1]!=' ')&(i!=0))
        {
            word[elem_i][0]=number;
            word[elem_i][1]=(i-1);
        }
        elem_i++;
    }
    else number++;
}

for (i=0; i<elem_i; i++)
for (j=0; j<2; j++)
std::cout<<word [i][j]<<"\n";

for (i=0; i<strlen(str); i++)
    delete word[i];

delete [] word;
delete [] str;
word=0;

std::cin.get();
return 0;
}

Массив с номерами не хочет выводится.


--------------------
Don't let the system get you down.
PM WWW ICQ Skype   Вверх
bsa
Дата 12.11.2009, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Metalex
Код
#include<string> //strlen
тебе дико повезло, что вообще скомпилировалось. Нужно подключать <cstring> для получения доступа к функциям strlen,strcpy и пр.
где ты выделяешь память под переменные типа int, которые инициализируешь в строках 27 и 28?
PM   Вверх
SemiC4
Дата 23.7.2010, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 23.7.2010

Репутация: нет
Всего: нет



Цитата(mekhanikus @ 10.11.2009,  13:04)
Может стоит перейти на с++?
Вот пример из Страуструпа.
Программа считает количество повторений каждого слова.
До сабжа рукой подать.

Код

map<string,int>histogram;

void record(const string& s)
{
    histogram[s]++;
}

void print(const pair<const string,int>& r)
{
    cout << r.first << '\t' << r.second << '\n';
}

istream_iterator<string>ii(cin);
istream_iterator<string>eos;

for_each(ii,eos,record);
for_each(histogram.begin(),histogram.end(),print);

Здравствуйте, я токо начинаю. Читаю Страуструпа. вот этот пример про подчет количества вхождения слов в строке. у меня вопрос почему не заканчивается ввод, создается впечатление, что интер программа не воспринимет как конец ввода. и программа не выходит из алгоритма for_each(ii,eos,record);
PM MAIL   Вверх
azesmcar
Дата 23.7.2010, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(SemiC4 @  23.7.2010,  15:37 Найти цитируемый пост)
создается впечатление, что интер программа не воспринимет как конец ввода

естественно, конец ввода это Ctrl+Z.
PM   Вверх
djamshud
Дата 23.7.2010, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 4
Всего: 39



>конец ввода это Ctrl+Z

В DOS и Win. Исторически и в unix конец передачи (или файла) - ctrl+d.

Добавлено через 2 минуты и 40 секунд
Исторически - я имел в виду аски-код, забинденный на это сочестание.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
SemiC4
Дата 23.7.2010, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 23.7.2010

Репутация: нет
Всего: нет



Цитата(azesmcar @ 23.7.2010,  17:15)

естественно, конец ввода это Ctrl+Z.

огромное спасибо  smile  . щас ещё разберусь почему программа завершается раньше времени и будет вобще хорошоsmile smile 

Код
#include<iostream>
#include<algorithm>
#include<map>
#include<iterator>

bool quit()
{
    int tries = 1;
    while (tries < 4)
    {
          std::cout<<"\nWhould you like exit? yes(y) no(n)\n";
          char answer;
          std::cin>>answer;
          switch(answer)
          {
          case 'y':
               return true;
          case 'n':
               return false;
          default:
               {
               std::cout<<"repat answer\n";
               tries++;
               }
          }
    }
    std::cout<<"I think, you mean \"yes\"\n";
    return true;
}

std::map<std::string, int> histogram;

void record (const std::string &s)
{
         histogram[s]++;
}

void print (const std::pair<const std::string, int> &r)
{
         std::cout<<r.first<<' '<<r.second<<'\n';
}

int main()
{
do
{
    std::istream_iterator<std::string> ii (std::cin);
    std::istream_iterator<std::string> eos;

    std::for_each(ii, eos, record);
    std::for_each(histogram.begin(), histogram.end(), print);
}while(!quit());
return 0;
}


не пойму почему после того как я ввел строку, нажал интер, потом ctrl+z, интер, программа выводит результат и закрывается, причем пишется что программа завершилась с тем кодом что указан в ретуне функции майн smile 

Это сообщение отредактировал(а) SemiC4 - 23.7.2010, 20:48
PM MAIL   Вверх
bsa
Дата 23.7.2010, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



SemiC4, читать надо начинать c часто задаваемых вопросов
PM   Вверх
SemiC4
Дата 24.7.2010, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 23.7.2010

Репутация: нет
Всего: нет



Цитата(bsa @ 23.7.2010,  22:32)
SemiC4, читать надо начинать c часто задаваемых вопросов

Спасибо конечно за совет, но то что описано  здесь, в часто задаваемых вопросах, (про быстрое закрытие программ, в самом конце) мне не помогло, потому как даже с такими изменениями в коде

Код
#include<iostream>
#include<algorithm>
#include<map>
#include<iterator>

bool quit()
{
    int tries = 1;
    while (tries < 4)
    {
          std::cout<<"\nWhould you like exit? yes(y) no(n)\n";
          char answer;
          std::cin>>answer;
          switch(answer)
          {
          case 'y':
               return true;
          case 'n':
               return false;
          default:
               {
               std::cout<<"repat answer\n";
               tries++;
               }
          }
    }
    std::cout<<"I think, you mean \"yes\"\n";
    return true;
}

std::map<std::string, int> histogram;

void record (const std::string &s)
{
         histogram[s]++;
}

void print (const std::pair<const std::string, int> &r)
{
         std::cout<<r.first<<' '<<r.second<<'\n';

         std::cin.ignore().get();
}

int main()
{
do
{
    std::istream_iterator<std::string> ii (std::cin);
    std::istream_iterator<std::string> eos;

    std::for_each(ii, eos, record);
    std::for_each(histogram.begin(), histogram.end(), print);

    std::cin.ignore().get();

}while(!quit());
return 0;
}

 

результат тот же smile 
PM MAIL   Вверх
bsa
Дата 25.7.2010, 17:24 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



блин. конечно тут не будет работать, так как после первого for_each поток std::cin перешел в состояние "конец файла" и из него больше ничего не читается. В данном случае, "паузу" можно сделать только через system("pause"), но функция quit() работать не будет. Решить проблему можно тремя путями:
1. читать значения из файла
2. зарезервировать определенное слово (или пустую строку) для выхода, например "quit" - в случае ее появления программа завершает ввод.
3. читать только определенное количество слов (например, предварительно спросив у пользователя)
PM   Вверх
SemiC4
Дата 25.7.2010, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 23.7.2010

Репутация: нет
Всего: нет



Цитата(bsa @ 25.7.2010,  17:24)
блин. конечно тут не будет работать, так как после первого for_each поток std::cin перешел в состояние "конец файла" и из него больше ничего не читается. В данном случае, "паузу" можно сделать только через system("pause"), но функция quit() работать не будет. Решить проблему можно тремя путями:
1. читать значения из файла
2. зарезервировать определенное слово (или пустую строку) для выхода, например "quit" - в случае ее появления программа завершает ввод.
3. читать только определенное количество слов (например, предварительно спросив у пользователя)

Огромное спасибо, bsa smile . теперь что-то проясняется smile 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0555 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.