从input1

时间:2018-05-04 04:25:24

标签: c++ arrays string

重要说明: 字符串(C ++对象)以及任何其他库,例如 array vectors 存储无限制的字符无法使用。

我的问题: 我们被赋予输入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 :(得分: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)

答案 1 :(得分:0)

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

意味着你需要输入直到用户想要,同时你可以为每个新字符使用malloc和realloc(),为每个新字符增加指针的大小。 (这可能是矢量等在幼稚程度上起作用的方式 - 虽然不确定)

相同的代码段:

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


}