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 的值来获取相应的操作,并执行其相应的代码。

相关推荐

#include<stdio.h> #include<stdlib.h> #include<string.h> int number(char ch); double get(char* str, int* v); double add(char* str); double muto(char* str, int* v); char* analy(char* str, int* v); double get(char* str, int* v) { double result = 0.0; int index = v; while ((str + index) == '(') { char* q = NULL; v = ++index; q = analy(str, v); if (q != NULL) { result = add(q); free(q); q = NULL; } return result; } while (number((str + index))) { result = result * 10 + (str[index] - '0'); index++; } if ((str + index) == '.') { double b = 1.0; while (number((str + ++index))) { b /= 10; result += b * ((str + index) - '0'); } } v = index; return result; } double add(char str) { double x = 0.0; int index = 0; x = muto(str, &index); while (1) { char ch = (str+index); index++; switch (ch) { case '\0': return x; case '+': x += muto(str,&index); break; case '-': x -= muto(str,&index); break; default: break; } } } double muto(char str, int v) { double x = 0.0; x = get(str, v); while (1) { if ((str + (v)) == '') { (v)++; x = get(str, v); } else if ((str + (v)) == '/') { (v)++; x /= get(str, v); } else { break; } } return x; } int number(char a) { int x = 0; if (a >= '0' && a <= '9') { x = 1; } return x; } char analy(char str, int v) { char q = NULL; int num = 0; int w = v; do { switch ((str + (v))) { case '(': num++; break; case ')': if (num==0) { ((v))++; q = malloc(sizeof(char) * (*v - w)); if (q != NULL) { strncpy(q, str + w, v - w - 1); return q; } else { return NULL; } } else { num--; } break; default: break; } } while ((str + (*v)++) != '\0'); return 0; } int main() { printf("请输入算式:\n"); char str[128] = {0}; scanf("%s",str); double res = add(str); printf("计算结果 :%f \n", res); } 请分析该代码中每个函数的作用

优化这段代码 if(i > num - 1) break; isDraw = (not == 2 && (draw == i+1)); if (DBData[i] != RT1064_YS_YYDD && DBData[i] != RT1064KZZ_FC_CHZ ) LCD_DisString((i%LISTOFFSET)+1, 0, gRunPara.gap_ActionDZInfo[gapid][DBData[i]].szName); if (DBData[i] == RT1064KZZ_FC_CHZ) LCD_DisString((i%LISTOFFSET)+1, 0, (char *)"大电流闭锁重合闸"); if (DBData[i] == RT1064_YS_YYDD) LCD_DisString((i%LISTOFFSET)+1, 0, (char *)"重合闸检有压时间"); val = get_ActionDZInfo_val(UNIT_GAP_RT1064,gapid,DBData[i]); if( DBData[i] >= RT1064KZZ_GL1_ALM && DBData[i] <= RT1064KZZ_KZHL && DBData[i] != RT1064KZZ_MODE && DBData[i] != RT1064KZZ_UAB_CH && DBData[i] != RT1064KZZ_UBC_CH && DBData[i] != RT1064KZZ_FBS && DBData[i] != RT1064KZZ_FBS_MODE) { (isDraw ? LCD_DisString_Not((i%LISTOFFSET)+1, 20,(char *)gcszOnOff[(int)val]) : LCD_DisString((i%LISTOFFSET)+1, 20,(char *)gcszOnOff[(int)val]) ); } else if(DBData[i] == RT1064KZZ_MODE) { (isDraw ? LCD_DisString_Not((i%LISTOFFSET)+1, 20,(char *)ModeName[(int)val]) : LCD_DisString((i%LISTOFFSET)+1, 20,(char *)ModeName[(int)val]) ); } else if (DBData[i] == RT1064KZZ_FBS || DBData[i] == RT1064KZZ_FBS_MODE ) { (isDraw ? LCD_DisString_Not((i%LISTOFFSET)+1, 20,(char *)FBS_NAME[(int)val]) : LCD_DisString((i%LISTOFFSET)+1, 20,(char *)FBS_NAME[(int)val]) ); } else if(DBData[i] == RT1064KZZ_UAB_CH || DBData[i] == RT1064KZZ_UBC_CH || DBData[i] == RT1064_DZ_CHZCS) { sprintf(szVal, "%0.f" , val); LCD_DisString((i%LISTOFFSET)+1, 19 , szVal); if(DBData[i] == RT1064_DZ_CHZCS) LCD_DisString((i%LISTOFFSET)+1, 24, (char *)"次"); if (isDraw == 1) len = LCD_BitNot(UNIT_PROTECT,UNIT_GAP_RT1064,gapid,DBData[i],i,bit); }

给下面这段代码加上中文注释:#include <stdio.h> #include <stdlib.h> #include <string.h> void menu1(); void create_file(FILE *fp, char *fname); void write_file(FILE *fp, char *fname); void read_file(FILE *fp, char *fname); int main() { system("color F4"); FILE *fp = NULL; int count = 0; char num[100]; int flag1 = 0, flag2 = 0, flag3 = 0; char F_name[20]; while (1) { menu1(); printf("\t请选择你要进行的文件操作:"); scanf("%s", num); getchar(); while (strlen(num) > 1 || num[0] < 49 || num[0] > 52) { printf("\t输入错误!请重新输入:"); scanf("%s", num); getchar(); } switch (num[0]) { case '1': flag1 = 1; break; case '2': flag2 = 1; break; case '3': flag3 = 1; break; case '4': printf("\n\t"); exit(0); break; } if (flag1 == 1) { flag1 = 0; create_file(fp, F_name); } else if (flag2 == 1) { flag2 = 0; write_file(fp, F_name); } else if (flag3 == 1) { flag3 = 0; read_file(fp, F_name); } } return 0; } void menu1() { printf("\n\n"); printf(" *************************************** \n"); printf("\t \n"); printf(" 文本编辑器 \n"); printf("\t \n "); printf(" *************************************** \n"); printf("\t 1.建立文本 \n"); printf("\t 2.编辑文本 \n"); printf("\t 3.读取文本 \n"); printf("\t 4.退出程序 \n"); printf(" *************************************** \n"); } void write_file(FILE *fp, char *fname) { char ch; printf("\t请输入编辑的文件名:\n\t"); gets(fname); if ((fp = fopen(fname, "w")) == NULL) { printf("\t不能打开文件!\n"); exit(0); } printf("\t请输入内容(以#号键结束):\n\t"); ch = getchar(); while (ch != '#') { fputc(ch, fp); ch = getchar(); } printf("\n\n"); getchar(); fclose(fp); } void create_file(FILE *fp, char *fname) { printf("\t请输入新建的文件名:\n\t"); gets(fname); if ((fp = fopen(fname, "w+")) == NULL) { printf("\t不能打开文件!\n"); exit(0); } printf("\t%s文件已经创建好!\n\n", fname); fclose(fp); } void read_file(FILE *fp, char *fname) { char ch; printf("\t请输入读取的文件名:\n\t"); gets(fname); if ((fp = fopen(fname, "r")) == NULL) { printf("\t不能打开文件!\n"); exit(0); } printf("\t"); while ((ch = fgetc(fp)) != EOF) { putchar(ch); } printf("\t\n\n"); fclose(fp); }

最新推荐

recommend-type

Scrapy-1.8.2.tar.gz

文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。
recommend-type

search-log.zip

搜索记录,包括时间、搜索关键词等,用于PySpark案例练习
recommend-type

6-12.py

6-12
recommend-type

2-6.py

2-6
recommend-type

Scrapy-0.24.5-py2-none-any.whl

文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

2. 通过python绘制y=e-xsin(2πx)图像

可以使用matplotlib库来绘制这个函数的图像。以下是一段示例代码: ```python import numpy as np import matplotlib.pyplot as plt def func(x): return np.exp(-x) * np.sin(2 * np.pi * x) x = np.linspace(0, 5, 500) y = func(x) plt.plot(x, y) plt.xlabel('x') plt.ylabel('y') plt.title('y = e^{-x} sin(2πx)') plt.show() ``` 运行这段
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。