重要说明: 字符串(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;
}
请添加任何相关标签。 我希望所有的编辑都有所帮助。
答案 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;
}