我正在Haskell做作业.但是,我正在使用的基本代码没有定义主函数,并且根据赋值的措辞,我相信我不应该在解决问题之外编写任何代码.但是,当我尝试编译我的代码时,我收到错误:
The IO function 'main' is not defined in module 'Main'
Run Code Online (Sandbox Code Playgroud)
我假设这是因为该函数没有主函数.但是,当我尝试编写自己的main函数时:
main :: IO ()
main = solve easy // easy is an array
Run Code Online (Sandbox Code Playgroud)
我收到错误:
Couldn't match expected type 'IO()' with actual type '[Int]'
Run Code Online (Sandbox Code Playgroud)
solve函数的类型声明如下:
solve :: [Int] -> [Int]
Run Code Online (Sandbox Code Playgroud)
所以它需要一个数组并返回一个数组.在写我的main函数时我做错了什么?即使我尝试将声明更改main为以下内容:
main :: [Int]
Run Code Online (Sandbox Code Playgroud)
要么
main :: IO [Int]
Run Code Online (Sandbox Code Playgroud)
我仍然无法编译.
在文件database.h中,我有以下结构:
struct parent {
...
};
struct childA : parent {
...
};
struct childB : parent {
...
};
struct childC : parent {
...
};
Run Code Online (Sandbox Code Playgroud)
我有以下课程:
class myClass {
parent myStruct;
...
myClass(int input) {
switch (input) {
//
// This is where I want to change the type of myStruct
//
}
};
~myClass();
}
Run Code Online (Sandbox Code Playgroud)
本质上,在myClass的构造函数中,我想根据输入更改myStruct的类型:
switch (input) {
case 0:
childA myStruct;
break;
case 1:
childB myStruct;
break;
case 2:
childC myStruct;
break;
}
Run Code Online (Sandbox Code Playgroud)
但是,我还没有找到适用于此的解决方案.如何将myStruct的类型更改为其类型的子类型?因为myStruct需要在构造函数外部可访问,所以我想在类的头中将其声明为类型parent,并将其类型更改为构造函数中的子类型.
我正在尝试编写一个函数来获取字符串的第一个非重复字符.对于所有情况,我都没有在O(n)时间内找到令人满意的答案.我目前的解决方案是:
char getFirstNonRepeated(char * str) {
if (strlen(str) > 0) {
int visitedArray[256] = {}; // Where 256 is the size of the alphabet
for (int i = 0; i < strlen(str); i++) {
visitedArray[str[i]] += 1;
}
for (int j = 0; j < 256; j++) {
if (visitedArray[j] == 1) return j;
}
}
return '\0'; // Either strlen == 0 or all characters are repeated
}
Run Code Online (Sandbox Code Playgroud)
但是,只要n <256,该算法在最坏的情况下在O(n ^ 2)时间内运行.我已经读过使用散列表而不是数组来存储每个字符被访问的次数可以让算法在O(n)时间内一致地运行,因为哈希表的插入,删除和搜索在O中运行(1次.我没有找到解释如何正确执行此操作的问题.我没有很多在C++中使用哈希映射的经验,所以任何帮助都会受到赞赏.