重要说明:不能使用字符串(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;
}
请添加任何相关标签。我希望所有的编辑都有所帮助。
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)
你可以通过使用每个字符的动态内存来做一件事来存储句子(听起来很荒谬,但这是唯一可能没有实际担心输入大小的事情)
这意味着您需要输入直到用户想要,同时您可以为每个新字符使用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;
}