1 / 1 / 0
Регистрация: 17.04.2010
Сообщений: 55
1

Нужно переделать массив под строки

17.04.2010, 21:08. Показов 2597. Ответов 22
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
У меня вводится по одному символу, а надо, чтобы вводилось строкой для работы фильтра:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class FilteredArray : virtual public Array
{
 
public:
    
    FilteredArray(long size):Array(size) { }
    bool Filter(char * string)
    {
        if (strlen(string) % 2 == 0)
        {
            return true;
        }
 
        return false;
    }
};
Добавление элементов:

C++
1
2
3
4
5
6
7
void Array::add(char x) 
{
   if(count < size)
   {
      p[count++] = x;
   }
}
пытаюсь вызвать таким образом:
C++
1
2
FilteredArray arr(size);
arr.Filter()
пишет, что error C2660: FilteredArray::Filter: функция не принимает 0 аргументов
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.04.2010, 21:08
Ответы с готовыми решениями:

Нужно переделать под 2х мерный массив
задача следующая, используя функции сортировки масcива, отсортировать строки матрицы есть вот...

Нужно переделать код под функции (одномерный массив)
«Однoмерные маcсивы», оформить каждый пункт задания в виде функции. Все необходимые данные для...

Под С++ нужно переделать
while pos(' ',s)&gt;0 do{пока есть пробелы} begin s1:=copy(s,1,pos(' ',s)-1);{копируем первое...

Нужно переделать под С
Нужно код с++ переделать на с #include &lt;stdio.h&gt; #include &lt;locale.h&gt;//для языка #include...

22
150 / 73 / 27
Регистрация: 09.04.2010
Сообщений: 297
17.04.2010, 21:34 2
пишет, что error C2660: FilteredArray::Filter: функция не принимает 0 аргументов
Так функция, реально, не принимает 0 аргументов! она принимает указатель на char
0
1 / 1 / 0
Регистрация: 17.04.2010
Сообщений: 55
17.04.2010, 21:53  [ТС] 3
FireNovel, а как под строки сделать не подскажете?
когда я добавляю:

C++
1
2
3
char *t;
FilteredArray arr(size);
arr.Filter(t);
то вылетает с этим:
Run-Time Check Failure #3 - The variable 't' is being used without being initialized.

как мне правильно сделать?
0
150 / 73 / 27
Регистрация: 09.04.2010
Сообщений: 297
17.04.2010, 22:06 4
напиши так:
C++
1
2
3
char *t = "bla-bla-bla";
FilteredArray arr(size);
arr.Filter(t);
0
1 / 1 / 0
Регистрация: 17.04.2010
Сообщений: 55
17.04.2010, 22:39  [ТС] 5
Цитата Сообщение от FireNovel Посмотреть сообщение
напиши так:
C++
1
2
3
char *t = "bla-bla-bla";
FilteredArray arr(size);
arr.Filter(t);
теперь не вылетает, но и ничего не делает.
0
150 / 73 / 27
Регистрация: 09.04.2010
Сообщений: 297
17.04.2010, 23:07 6
теперь не вылетает, но и ничего не делает.
Что тебе нужно, чтоб она делала?
0
1 / 1 / 0
Регистрация: 17.04.2010
Сообщений: 55
18.04.2010, 00:23  [ТС] 7
Цитата Сообщение от FireNovel Посмотреть сообщение
Что тебе нужно, чтоб она делала?
осуществляла фильтрацию по приведенному фильтру на четность вводимых строк
0
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
18.04.2010, 11:03 8
Цитата Сообщение от gvenog Посмотреть сообщение
осуществляла фильтрацию по приведенному фильтру на четность вводимых строк
это как?
функция bool FilteredArray::Filter(char * string) как я вижу проверяет четность длины строки, переданной ей в качестве параметра.
и все.

напиши русским языком, что ты хочешь получить.
0
1 / 1 / 0
Регистрация: 17.04.2010
Сообщений: 55
18.04.2010, 13:10  [ТС] 9
Цитата Сообщение от Patch Посмотреть сообщение
это как?
функция bool FilteredArray::Filter(char * string) как я вижу проверяет четность длины строки, переданной ей в качестве параметра.
и все.

напиши русским языком, что ты хочешь получить.
Фильтр - правильный. Дело в том, что я не знаю как передать эту самую строку в качестве параметра, так как у меня задан массив символов и я хочу переделать, чтобы был массив строк.
Вот задание:
создать 2 различных класса, производные от класса динамической структуры, позволяющие сортировать и фильтровать выходные данные. Для этого вводятся виртуальные функции: для сортировки - функция сравнения двух строк, для фильтрации - предикат, определяющий будет ли строка присутствовать в выборе фильтра. Также создать класс, осуществляющий одновременно сортировку и фильтрацию.
Сортировка - по возрастанию целого значения, содержащегося в строке.
Фильтр - строки четной длины.
0
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
18.04.2010, 13:32 10
Цитата Сообщение от gvenog Посмотреть сообщение
создать 2 различных класса, производные от класса динамической структуры
индус задание писал... или доцент, как минимум.
Цитата Сообщение от gvenog Посмотреть сообщение
позволяющие сортировать и фильтровать выходные данные
это я вообще не понял.
что есть выходные данные для объекта такого класса?
входные, допустим, строка.
а выходные?
ну, и самое главное, как эти данные будут оттуда выходить?
Цитата Сообщение от gvenog Посмотреть сообщение
для фильтрации - предикат, определяющий будет ли строка присутствовать в выборе фильтра.
надо все-таки переводить на русский.
по этому описанию можно написать десяток принципиально по-разному работающих классов.
с разными результатами, естественно.

пиши все-таки по-нашему, чего тебе надобно...
0
24 / 14 / 2
Регистрация: 20.02.2010
Сообщений: 181
18.04.2010, 13:45 11
Вот ссылка на университетские лабораторные. Там полные, работающие коды. Всё от простого вывода на экран в консоли до использования файлов. Лабораторные с первого курса. Пользуйтесь) Кому помог, нажмите кнопочку "сказать спасибо")
0
1 / 1 / 0
Регистрация: 17.04.2010
Сообщений: 55
18.04.2010, 13:46  [ТС] 12
Patch, мне в первую очередь надо преобразовать массив под ввод строк. Я ввожу так:
C++
1
2
3
4
SortedArray arr1(size);
arr1.add('p');
arr1.add('r');
arr1.add('o');
и т.д. по одному символу. а, если ввожу так:
C++
1
arr1.add("pora");
error C2664: Array::add: невозможно преобразовать параметр 1 из 'const char [5]' в 'char'
Функция добавления написана выше. Как мне её переделать, чтобы вводилось строками? или что не так я делаю?
0
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
18.04.2010, 14:20 13
тогда уж так.
C++
1
2
3
4
5
6
7
8
9
10
void Array::add(char * x) 
{
 
          while(*x != 0)
          {
                  if(count >= size) return;
                  p[count++] = *x;
                  x++;
          }
}
а лучше оставь обе функции.
пусть будут перегруженные, в зависимости от типа параметра.

только вот, как я понимаю, p - массив с вполне определенным размером.
это не динамический массив.
или я опять чего-то не понял?
1
1 / 1 / 0
Регистрация: 17.04.2010
Сообщений: 55
18.04.2010, 14:35  [ТС] 14
Patch, спасибо! код работает. Да, массив не динамический.
Как мне теперь вызвать этот фильтр?
C++
1
2
FilteredArray arr(size);
arr.Filter();
Что задать в качестве аргумента? И как объявить этот аргумент не подскажете?
0
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
18.04.2010, 14:43 15
Цитата Сообщение от gvenog Посмотреть сообщение
Что задать в качестве аргумента? И как объявить этот аргумент не подскажете?
я не понял, что должен делать фильтр.
вызвать можно
C++
1
2
if(arr.Filter("pora"))
               MessageBox(TEXT("В строке четное число символов!"));
но в результате ничего дельного не получится.
0
1 / 1 / 0
Регистрация: 17.04.2010
Сообщений: 55
18.04.2010, 14:56  [ТС] 16
Фильтр должен находить чётные по длине строки и убирать их, оставляя нечетные и вывести на экран только нечетные строки.
0
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
18.04.2010, 15:38 17
Цитата Сообщение от gvenog Посмотреть сообщение
Фильтр должен находить чётные по длине строки и убирать их, оставляя нечетные и вывести на экран только нечетные строки.
где находить?
у тебя одна строка в классе.
0
1 / 1 / 0
Регистрация: 17.04.2010
Сообщений: 55
18.04.2010, 15:47  [ТС] 18
В этом и вопрос. Как создать ещё строки для сравнения?
0
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
18.04.2010, 16:00 19
вот мы и перешли к главному вопросу, который меня с самого начала смущал.
вопросу внятной формулировки задачи на русском языке.

судя по всему, класс должен хранить неопределенное количество строк неопределенной длины.
так?
и какими-то функциями обрабатывать то, что в нем там уже есть.

но все равно неясно, что означает фраза в задаче "создать 2 различных класса, производные от класса динамической структуры"
каков базовый класс, от которого они наследуются?
и неясно, что за "предикат", определяющий "будет ли строка присутствовать в выборе фильтра".
0
1 / 1 / 0
Регистрация: 17.04.2010
Сообщений: 55
18.04.2010, 16:12  [ТС] 20
Так как массив у меня не динамический, то количество строк - определенное надо и определенной длины.
Базовый класс - Array - от него и наследуются.
Насчет предиката и сама не поняла - просто должен быть фильтр, как я раньше писала.
вот что у меня есть:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#pragma once
#include "stdafx.h"
#include <iostream>
 
using namespace std;
 
class Container
{
    virtual void add(char x) = 0;
    virtual void remove(char a) = 0;
    virtual long length() const {return count;} = 0; //не реализована
};
 
class Array : public Container
{
    protected:
    long size;        //max size  of array
    long count;       //count of elements
    char* p;          //pointer to the beginning of the array
 
public:
    //constructors
    Array(long s=10) 
    {
       count =0;
       size=s;
       p = new char[size];
    }
 
    Array(const Array& cp)
    {
        count=cp.count;
        size=cp.size;
        p=new char[size];
        for(unsigned i=0;i<count;++i)
        {
            p[i]=cp.p[i];
        }
    }
    //destructor
    ~Array()
    {
       if(p) delete[] p;
    }
    //member functions
    virtual void add(char x);
    virtual void add(char * x);
    virtual void remove(char a);
    void print() const; 
    long find (char);
    virtual bool Filter(char *); // фильтрация
    virtual void Sort(); // сортировка
    //operators
    Array operator=(Array cp);
    Array operator+(const char*);
    Array operator-(const char*);
    bool operator <(Array&);
    bool operator >(Array&);
    bool operator ==(Array&);
    bool operator !=(Array&);
    char operator [](int k);
    friend ostream& operator <<(ostream& out, Array& a);
};
 
// класс, осуществляющий фильтрацию
class FilteredArray : virtual public Array
{
    // в этом классе перегрузим метод Filter базового класса
 
public:
    
    FilteredArray(long size):Array(size) { }
    bool Filter(char * string)
    {
        if (strlen(string) % 2 == 0)
        {
            return true;
        }
 
        return false;
    }
};
 
// класс, осуществляющий сортировку
class SortedArray : virtual public Array
{
    // в этом классе перегрузим метод Sort базового класса
 
public:
 
    SortedArray(long size):Array(size) { }
    void Sort()
    {
        for (unsigned i = 0; i < count; i++)
        {
            for (unsigned j = count - 1; j > i; j--)
            {
                if (p[j-1] > p[j])
                {
                    char t = p[j];
                    p[j] = p[j-1];
                    p[j-1] = t;
                }
            }
        }
 
    }   
};
 
// класс, осуществляющий и сортировку, и фильтрацию
class SortedFilteredArray : public SortedArray, public FilteredArray
{
    // класс будет пустым, так как всё реализовано в базовых классах
};
0
18.04.2010, 16:12
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.04.2010, 16:12
Помогаю со студенческими работами здесь

Нужно переделать программу с С++ под С
Доброе утро форумчани! Есть программа написанная на С++ #include &lt;iostream&gt; #include &lt;string&gt;...

Нужно переделать под БИХ фильтр
Привет, задача такая: нужно переделать цикл в этом коде под БИХ фильтр, сейчас он сделан под КИХ, и...

нужно компонент переделать под XE5
имеется компонент на делфи 7 ну там кнопки чекбоксы,вот их нужно переделать под xe5 кто...

Нужно переделать программа под Pascal ABC
label n1,n2; var A : arrayof integer; b, t : arrayof integer; n,l,x,c,i,j : integer; Begin...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru