从input1中查找input2中字符的位置

问题描述 投票:0回答:2

重要说明:不能使用字符串(C ++对象)和任何其他库,如可以存储无限字符的数组或向量。

对于我的问题:我们给出了输入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;

}

请添加任何相关标签。我希望所有的编辑都有所帮助。

c++ arrays string
2个回答
1
投票

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
投票

你可以通过使用每个字符的动态内存来做一件事来存储句子(听起来很荒谬,但这是唯一可能没有实际担心输入大小的事情)

这意味着您需要输入直到用户想要,同时您可以为每个新字符使用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;


}
© www.soinside.com 2019 - 2024. All rights reserved.