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

Поиск:

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


Опытный
**


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

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



user posted image
user posted image
Задача 269:
user posted image
Ни до чего лучшего я не додумался, кроме как записывать в динамический массив номер начала и конца каждого слова, а потом уже используя этот массив с номерами, сравнивать слова. Пока я только запрограммировал запись этих  номеров еще без сравнения:
Код
#include<iostream.h>
#include<conio.h>
#include<stdio.h>  //gets
#include<string.h> //strlen

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

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

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

gets(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++)
cout<<word [i][j]<<"\n";

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

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

getch ();
return 0;
}

При исполнении ввод происходит нормально, а когда должены выводится номера, окно просто закрывается...(Borland C++ 3.1) Помогите найти ошибку здесь, а дальше буду пытатся сравнивать.


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


Вольноопределяющийся
*


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

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



Может стоит перейти на с++?
Вот пример из Страуструпа.
Программа считает количество повторений каждого слова.
До сабжа рукой подать.

Код

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);

PM MAIL   Вверх
Metalex
Дата 10.11.2009, 17:45 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



и как она работает? мне ничего не понятно


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


Опытный
**


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

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



неужели программисты не могут найти ошибку в моем коде?


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


Опытный
**


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

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



Metalex, твой код большой, страшный и непонятный.
никто не хочет его читать
перепиши на С++

Это сообщение отредактировал(а) Abyx - 10.11.2009, 19:43
PM MAIL   Вверх
Metalex
Дата 10.11.2009, 20:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Abyx, а это что?


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


Опытный
**


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

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



Основная проблема по которой ты даже не можешь посмотреть результаты своей программы - это особенности оператора gets. Объясняю подробнее: перед его использованием ты вводишь колличество символов оператором cin>>n; Соответственно в n записывается введённое тобой число а во входной очереди остаётся последовательность '/n', собственно на которую gets и реагирует. Таким образом gets принимает эту последовательность и завершается и в твоём чаровском масиве записывается 0 символов. А вся строкаа, которую ты пишешь дальше - ты пишешь для оператора getch(). Поставь после cin>>n; оператор getch() и будешь уже получать содержательные результаты, на которые будешь уже сстветственно реагировать.

ЗЫ А сам код не смотрел, потому что он у тебя действительно кривовато написан и нет никакого желания тратить время на его проверку. 
ЗЫЫ И перейди с (Borland C++ 3.1) на что нибуть поновее. Слишком уж старая версия плюсов. =)

Это сообщение отредактировал(а) N1ko - 11.11.2009, 00:38
PM MAIL ICQ   Вверх
Metalex
Дата 11.11.2009, 00:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



N1ko, getch() - это для задержки экрана, чтоб он не пропадал сразу же после выполнения программы. 
Посоветуй, на что поновее?


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


Опытный
**


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

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



1) getch() насколько я помню ждёт принятия одного символа, а задержка экрана это только последствие работы этого оператора
Цитата

int getch();
Описание:
Функция getch читает без эхо-отображения отдельный символ прямо с консоли

2) Ну например dev C++ А если собираешься серьёхно этим заниматься то устанавливай visual studio и выбирай там консольный проект

Это сообщение отредактировал(а) N1ko - 11.11.2009, 02:11
PM MAIL ICQ   Вверх
Metalex
Дата 11.11.2009, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Dev C++, журнал компиляции:
Цитата
Компілятор: Default compiler
Виконання  g++.exe...
g++.exe "D:\BORLANDC\BIN\5laba\3ZADACHA.CPP" -o "D:\BORLANDC\BIN\5laba\3ZADACHA.exe"    -I"C:\Dev-Cpp\include\c++"  -I"C:\Dev-Cpp\include\c++\mingw32"  -I"C:\Dev-Cpp\include\c++\backward"  -I"C:\Dev-Cpp\include"   -L"C:\Dev-Cpp\lib"
In file included from C:/Dev-Cpp/include/c++/backward/iostream.h:31,
                 from D:/BORLANDC/BIN/5laba/3ZADACHA.CPP:1:
C:/Dev-Cpp/include/c++/backward/backward_warning.h:32:2: warning: #warning This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <X> header for the <X.h> header for C++ includes, or <sstream> instead of the deprecated header <strstream.h>. To disable this warning use -Wno-deprecated.
D:/BORLANDC/BIN/5laba/3ZADACHA.CPP:49:2: warning: no newline at end of file

Виконання завершено
Компіляція успішна

Здесь есть какие-то предупреждения, но я не пойму какие..


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


Опытный
**


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

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



ну одна из ошибок Вместо <iostream.h> нужно писать <iostream> Это новый стандарт. Исходя из твоего изначального кода ещё нужно убрать getch () и conio.h так как это так это уже тоже не используется.  Перед каждым cin и cout напиши std:: Что это такое можешь почитать в инете. Благо инфы по этому поводу много. Вместо getch() используй cin.get(); фоператор принимающий один символ. 
<strstream.h> у тебя тож не правильный. Правда не помню для чего он юзается. В общем всё нужно заменить по новым стандартам. После того как прочтёшь это всё,и справишь и что то будет не получаться, кинь код - помогу.

Это сообщение отредактировал(а) N1ko - 11.11.2009, 12:00
PM MAIL ICQ   Вверх
ThisIsSparta
Дата 11.11.2009, 12:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Metalex @  10.11.2009,  22:43 Найти цитируемый пост)
getch() - это для задержки экрана, чтоб он не пропадал сразу же после выполнения программы. 

используй для этой цели лучше 
Код
std::cin.get();


Это сообщение отредактировал(а) ThisIsSparta - 11.11.2009, 12:15
PM MAIL   Вверх
N1ko
Дата 11.11.2009, 16:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ну я вообщето это написал )))) А здесь как бы между этими вариантами выбрать не получится, по этому слово лучше здесь мягко говоря не уместно. Ведь всё зависит только от компилятора насколько я знаю. Только в зависимости от него мы будем выполнять тот или инной оператор.

Это сообщение отредактировал(а) N1ko - 11.11.2009, 16:44
PM MAIL ICQ   Вверх
ThisIsSparta
Дата 11.11.2009, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(N1ko @  11.11.2009,  14:43 Найти цитируемый пост)
Ну я вообщето это написал ))))

мда, не заметил))
Цитата(N1ko @  11.11.2009,  14:43 Найти цитируемый пост)
Ведь всё зависит только от компилятора насколько я знаю. Только в зависимости от него мы будем выполнять тот или инной оператор.

не очень понял, это относится к cin.get() vs getch()? cin.get - это, насколько я знаю, кроссплатформенный вариант (из iostream), а getch() - не входит в стандартную библиотеку c++ (из conio.h).
PM MAIL   Вверх
N1ko
Дата 11.11.2009, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Я почему то думал что cin.get() в Borland 3.1 C++ не было ещё. Значит ошибался. =) Сорри =))
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

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


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

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


 




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


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

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