switch判断char*
时间: 2023-07-23 22:05:06 浏览: 42
在C语言中,switch语句只能使用整型或枚举类型作为判断条件,不能使用指针类型。但是我们可以通过将字符数组转化为整型来实现类似的功能。
假设我们有一个字符数组char *str,可以通过以下方式将其转化为整型:
```
int hash = 0;
for (int i = 0; str[i]; i++) {
hash = hash * 31 + str[i];
}
```
这个hash值可以作为switch语句的判断条件。例如:
```
char *str = "hello";
int hash = 0;
for (int i = 0; str[i]; i++) {
hash = hash * 31 + str[i];
}
switch (hash) {
case 'h' * 31 * 31 * 31 + 'e' * 31 * 31 + 'l' * 31 + 'l':
printf("Hello!\n");
break;
case 'w' * 31 * 31 * 31 + 'o' * 31 * 31 + 'r' * 31 + 'l':
printf("World!\n");
break;
default:
printf("Unknown string!\n");
}
```
这段代码会输出"Hello!",因为hash值与'hello'对应的hash值相等。
相关问题
switch判断范围
在使用switch结构进行范围判断时,我们可以使用"..."来表示连续的范围。这样可以避免将变量直接放在switch后导致一直打印default的结果。 例如,在C语言中,可以使用"..."来进行范围判断。以下是一个示例代码:
```c
#include <stdio.h>
int main(int argc, char *argv[]) {
int x;
scanf("%d", &x); // 输入一个数
switch (x) {
case 0 ... 100: // 等价于 x>=0 && x<=100
printf("0 <= x <= 100\n");
break;
case 101 ... 200: // 等价于 x>=101 && x<=200
printf("101 <= x <= 200\n");
break;
case 201 ... 300: // 等价于 x>=201 && x<=300
printf("201 <= x <= 300\n");
break;
default:
printf("error!\n");
break;
}
return 0;
}
```
在上述示例中,我们使用了"..."来表示范围判断,例如"0 ... 100"表示x的范围在0到100之间。 Switch结构使用这种方式可以清晰地判断范围,并避免代码累赘的问题。
switch判断uint_
在 C++ 中,我们不能使用 switch 语句来判断 uint 类型的变量。因为 switch 语句只支持整数类型(包括 char、short、int 和 long)以及枚举类型的判断,而 uint 类型不属于这些类型之一。
但是,我们可以使用 if-else 语句来实现对 uint 类型变量的判断。例如:
```c++
uint32_t value = 100; // 假设 value 是 uint32_t 类型
if (value == 100) {
// ...
} else if (value == 200) {
// ...
} else {
// ...
}
```
另外,如果你需要根据 uint 类型变量的值进行判断并执行相应的操作,你也可以使用数组或者映射表来实现。例如:
```c++
uint32_t value = 100; // 假设 value 是 uint32_t 类型
const char* actions[] = {
"action1",
"action2",
"action3",
// ...
};
if (value < sizeof(actions) / sizeof(actions[0])) {
std::cout << actions[value] << std::endl;
} else {
// ...
}
```
在上面的示例中,我们使用一个字符串数组来存储所有可能的操作,然后根据 value 的值来获取相应的操作,并执行其相应的代码。