Нахождение местоположения символа на входе 2 из input1 - PullRequest
0 голосов
/ 04 мая 2018

Важное примечание: строка (объект C ++) и любая другая библиотека, такая как массив или векторы , которые могут хранить неограниченное количество символов, не могут использоваться.

На мой вопрос: Нам дано input 1 , которое является предложением неограниченного количества символов. например. Жизнь прекрасна.

Ввод 2 : символ, местоположение которого мы должны найти, используя контрольную точку (средний символ на входе 1 после того, как он отсортирован, а повторяющиеся символы удалены), принятый за ноль. например. плата.

An example:
Input 1: Life is beautiful
Input 2: see

Output: 2, -2, -2

Объяснение: Итак, во-первых, мы удаляем все пробелы из ввода 1 и делаем все строчные, а затем сортируем их в порядке возрастания, после чего находим букву ссылки (для приведенного выше примера это «i»). Мы удаляем повторяющиеся символы и затем, наконец, ставим позиции для символов на входе 1.

Example 2
Input 1: abcde
Input 2: aad

Output: -2, -2, 1

Если вход 2 содержит контрольную точку, то код возвращает ноль. Например.

An example:
Input 1: abcde
Input 2: cab

Output: 0

input1 всегда нечетный, а input2 всегда не более 10 символов.

Проблема, с которой я столкнулся, заключается в том, что я не уверен, как хранить эти входные данные без использования строк, массивов и т. Д. И даже если я знаю, как их хранить, я не могу сравнить входные данные, например, input1 [1] = input2 [1] потому что мы не можем использовать массивы / строки.

Является ли список полезной опцией в отношении важной заметки?

В основном я делал это с использованием массива, но не уверен, как подойти к нему без массива. Я пытался зациклить символ, но он хранит только первый символ.

Код моей практики:

#include <iostream>

using namespace std;

int main() {

    char input1;

    for(int i =0; i < 3; i++ ) //for chacking whether the loops work or not.

    {
        cin >> input1;

    }

    cout<< input1;

    char input2;

}

Пожалуйста, добавьте любые соответствующие теги. Я надеюсь, что все правки помогут.

Ответы [ 2 ]

0 голосов
/ 04 мая 2018

KushanMehta предложила C-ish решение. Более C ++ - реализовать класс, заключающий в себе динамический массив из элементов . В C ++ это может быть:

template <class T> 
class MyArr {
protected:
    T *arr;             // a pointer to the dynamic array
    size_t len;         // the used length
    size_t capacity;    // the allocated capacity
    ...

Поскольку он содержит указатель на динамический массив, вы не можете полагаться на члены по умолчанию и должны реализовать конструктор копирования и перемещения, оператор присваивания и деструктор.

Чтобы использовать все возможности библиотеки алгоритмов C ++, вы должны объявить функции [c] begin () и [c] end (), указывающие на начало массива и один последний последний элемент.

const T* cbegin() const {
    return arr;
}
const T* cend() const {
    return arr + len;
}

Затем вам нужен подкласс для символов, реализующих некоторые методы для преобразования всех символов в нижний регистр и удаления пробелов, сортировки массива и удаления дубликатов. Вы должны написать io специализации для операторов << и >>, чтобы иметь возможность вводить строки из stdin и выводить их

Класс MyArr может использоваться непосредственно для хранения значения результата: просто получить специализацию для элементов int и реализовать необходимые спецификации.

Это может быть не очень легко, но вы будете учить C ++ таким образом (не C)

0 голосов
/ 04 мая 2018

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

То есть вы берете ввод до тех пор, пока пользователь не захочет, тем временем вы можете использовать malloc и realloc () для каждого нового символа, увеличивая размер вашего указателя на char для каждого нового символа. (Вероятно, так работает вектор и т. Д. На наивном уровне - хотя и не уверен в этом)

Фрагмент кода для того же:

#include <iostream>
#include<cstdlib>
#include<cstring>

using namespace std;

int main() {

    char temp;

    char *sentence = (char*) malloc(2*sizeof(char));

    int counter = 0;

    while( cin>>temp ){



        sentence[counter++] = temp;

        sentence = (char*) realloc(sentence, (counter+2)*sizeof(char));

    }

    sentence[counter] = '\0';

    cout<<"The sentence is"<<endl<<strlen(sentence)<<endl<<sentence;


}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...