相关疑难解决方法(0)

字符串的哈希函数

我正在使用C语言编写哈希表,我正在测试字符串的哈希函数.

我尝试过的第一个函数是添加ascii代码并使用modulo(%100)但是我在第一次数据测试时得到的结果很差:140个单词的40个冲突.

最终的输入数据将包含8 000个单词(它是一个文件中的dictionnary存储).哈希表声明为int table [10000]并包含txt文件中单词的位置.

第一个问题是哪个是散列字符串的最佳算法?以及如何确定哈希表的大小?

提前致谢 !

:-)

c algorithm hash dictionary hashtable

109
推荐指数
7
解决办法
19万
查看次数

C/C++:切换非整数

通常我需要根据非POD常量元素的值选择要做的事情,如下所示:

switch( str ) {
  case "foo": ...
  case "bar": ...
  default:    ...
}
Run Code Online (Sandbox Code Playgroud)

可悲的是switch只能用整数:error: switch quantity not an integer.

实现这样的事情最简单的方法是获得一系列ifs:

if( str == "foo" )      ...
else if( str == "bar" ) ...
else                    ...
Run Code Online (Sandbox Code Playgroud)

但是这个解决方案看起来很脏并且应该花费O(n),其中n是案例数,而在最坏的情况下,使用二进制搜索,这段代码可能花费O(log n).

使用一些数据结构(如Maps)可以获得表示字符串的整数(O(log n)),然后使用O(1)switch,或者可以通过if在右边嵌套s 来实现静态二进制排序但是,这些黑客攻击还需要大量编码,使一切变得更加复杂和难以维护.

最好的方法是什么?(快速,干净,简单,正如switch声明所述)

c c++ switch-statement

53
推荐指数
5
解决办法
3万
查看次数

带有QString类型的C++中的switch/case语句

我想在我的程序中使用switch-case但编译器会生成错误.我如何使用该switch语句QString

编译器给我这个错误:

switch expression of type 'QString' is illegal
Run Code Online (Sandbox Code Playgroud)

我的代码如下:

bool isStopWord( QString word )
{
bool flag = false ;

switch( word )
{
case "the":
    flag = true ;
    break ;
case "at" :
    flag = true ;
    break ;
case "in" :
    flag = true ;
    break ;
case "your":
    flag = true ;
    break ;
case "near":
    flag = true ;
    break ;
case "all":
    flag = true ;
    break ;
case …
Run Code Online (Sandbox Code Playgroud)

c++ qstring qt qt4 switch-statement

26
推荐指数
4
解决办法
7万
查看次数

Switch case语句如何实现或在内部工作?

我在某处读到该switch语句使用"二进制搜索"或一些排序技术来精确选择正确的情况,与else-if梯形图相比,这增加了它的性能.

如果我们按顺序给出案例,那么交换机的工作速度会更快吗?是这样吗?你能在这个问题上添加宝贵的建议吗?

我们在这里讨论了相同的问题并计划发布作为一个问题.

c c++ gcc if-statement switch-statement

23
推荐指数
2
解决办法
1万
查看次数

switch语句中的C字符串

可能重复:
在C中打开字符串的最佳方法

字符串(c字符数组)和switch语句一起使用的一般方法是什么?我正在查询数据库中存储为的货币

"USD"
"EUR"
"GBP"
Run Code Online (Sandbox Code Playgroud)

等等。来自PHP背景,我只需执行以下操作:

switch ($string) {
  case "USD":
   return "$";
   break;
  case "EUR":
   return "€";
   break;   
  case "GBP":
   return "£";
   break;
  default:
   return "$";
}
Run Code Online (Sandbox Code Playgroud)

在C中,case值必须是整数。我将如何在C中实现类似的功能?我最终会在一个很大的if / else块中写很多strcmp吗?另请注意,我不能简单地比较货币的第一个字符,因为某些字符(尽管在本示例中不是)以相同的字符开头。

c switch-statement

4
推荐指数
1
解决办法
4932
查看次数

我们可以在 c 中对字符串使用 switch-case 语句吗?

int a = 0 , b = 0;
char* c = NULL;

int main(int argc , char ** argv){

    c = argv[2];
    a = atoi(argv[1]);
    b = atoi(argv[3]);

    switch(c){

        case "+": printf(a+b);
                  break;
    }

    printf("\n\n");

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c string switch-statement

3
推荐指数
1
解决办法
2万
查看次数

C - 没有正确初始化字符串成员的结构的静态数组?

好的,所以这里.我尝试过在C字符串值做一个开关,如所描述这里.但是,结构数组似乎没有正确初始化.我的(简化)程序如下所示:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define BADKEY     -1
#define VALUE       1
#define OTHERVALUE  2
#define FOOVALUE    3

#define NREQKEYS (sizeof(lookuptable)/sizeof(symstruct_t))

typedef struct {
    char *key;
    int val;
} symstruct_t;

static symstruct_t lookuptable[] = {
    { "some value here", VALUE },
    { "other value",     OTHERVALUE },
    { "yet another one", FOOVALUE }
};

int main(void) {
    // Testing...
    int i;
    for (i = 0; i < NREQKEYS; i++) {
        symstruct_t *sym = lookuptable + i * sizeof(symstruct_t); …
Run Code Online (Sandbox Code Playgroud)

c arrays string struct initialization

1
推荐指数
1
解决办法
1007
查看次数

开关盒的C输入

如何输入String并在Switch命令中使用它?这是代码,但我得到的开关数量不是整数错误.

#include <stdio.h>

int main(void) {
    float usd2 = 0.9117;
    float yen2 = 0.0073;
    float pound2 = 1.4137;
    float eingabe;
    char whr[] = "";

    printf("Bitte Summe in EURO eingeben: ");
    scanf("%f", &eingabe);
    printf("Die Währungnummer eingeben USD, YEN, POUND: ");
    scanf("%s", &whr);

    switch(whr) {
        case "usd": printf("%.4f EURO es sind dann %.4f USD.", eingabe, (eingabe/usd2));
        break;
        case "yen": printf("%.4f EURO es sind dann %.4f YEN.", eingabe, (eingabe/yen2));
        break;
        case "pound": printf("%.4f EURO es sind dann %.4f POUND.", eingabe, (eingabe/pound2));
        break;
        default: …
Run Code Online (Sandbox Code Playgroud)

c input switch-statement

1
推荐指数
2
解决办法
1211
查看次数

用字符串切换

不知何故,我的switch语句没有通过我的任何案例,但它不应该进入一个?(我使用/sf/answers/281048701/作为参考).

没有输出,应用程序被阻止后.

#include <stdio.h>

#include <stdlib.h>

#define BADKEY -1
#define string1 1
#define string2 2
#define string3 3
#define string4 4
char *x = "string1";

typedef struct {char *key; int val; } t_symstruct;

static t_symstruct lookuptable[] = {
    { "string1", string1 }, { "string2", string2 }, { "string3", string3 }, { "string4", string4 }
};

#define NKEYS (sizeof(lookuptable)/sizeof(t_symstruct))

int keyfromstring(char *key) {
    int i;
    for (i=0; i < NKEYS; i++) {
        t_symstruct *sym = lookuptable + i;
        printf("before: …
Run Code Online (Sandbox Code Playgroud)

c case-statement switch-statement

0
推荐指数
1
解决办法
358
查看次数