wo-2 10-05 dfeixtay copy
让switch支持字符串
java可以借鉴
C 的switch只支持整型表达式、以及可以转化成整型的表达式。这就是说,switch不支持字符串、数组、浮点数。支持整型,包括short / unsigned short / int / unsigned int/ long / unsigned long 。此外,还有long long和unsigned long (如果编译器支持long long的话) 。除了整型,如果一个变量或表达式可以转化成整型,那么switch也支持,就是根据这个原则我们可以将switch()中的参数转换成含有字符串的表达式来处理字符串的选择问题。如下:
switch(strcmp(str1,str)==0?(1:strcmp(str2,str)==0?(2:strcmp(str3,str)==0?3:default)))
{
case 1:
.....................
case 2:
.......................
case 3:
........................
case 4:
...........................
default:
..........................
}
看了下论坛,有网友说可以使用hash函数替代的方法,如:
switch ( hash( somestring ) )
{
case xxx : // xxx = hash( "your string1" );
...
}
还有网友指出可以用查表的方法实现,如:
TStrings *ss = new TStringList();
ss->Add( "Your string1" );
ss->Add( "Your string2" );
...
switch( ss->IndexOf( somestring ) )
{
0 : // Your string1
1 : // Your string2
...
default : // Invalid
}
delete ss;
上述两种方法我均没有测试过,感兴趣的朋友可以搞一下。
在这段文字中,我最感兴趣的是当年想写没有写出来的三元选择符嵌套:
switch(strcmp(str1,str)==0?(1:strcmp(str2,str)==0?(2:strcmp(str3,str)==0?3:default)))
经过研究,(?
(:
))中间的一对括号让我很费解啊,没有试过,下次写的时候试试!!
分享到:
相关推荐
这意味着直接使用字符串作为`switch`表达式的值是不被允许的。 #### 问题背景 在给定的示例代码中,作者尝试通过将字符串映射到整数值来间接实现字符串的比较。具体来说,这段代码定义了一个名为`switchCaseStr`的...
第二个例子展示了如何结合正则表达式(`RegExp`)使用`switch`,即使`case`后面的值是一个变量: ```html <!DOCTYPE HTML> <title>JavaScript Switch with RegExp var str1 = "Test1"; var str2 = "Test1"; ...
- 自Java 7起,引入了对`String`类型的switch支持,但case标签必须是字符串常量或字面量。 3. **case语句**: - 每个case后面跟着要比较的值和冒号。值的数据类型必须与表达式的结果类型相同,并且必须是常量或...
标题中的知识点涵盖了编写Shell脚本时经常会使用的几个关键元素:复杂数学式的处理、字符串的比较、布尔值的表达以及case结构的使用。接下来,我们将详细地对这些元素进行解析和说明。 首先,Shell脚本中的复杂数学...
在C#编程中,解析字符串并按照运算表达式计算出最终结果值是一项常见的任务,它涉及到计算机科学中的解析和计算逻辑。在这个过程中,我们通常会用到表达式求值(Expression Evaluation)技术,这可以分为两种主要...
在C++编程中,处理字符串计算是一个涉及到字符串处理、表达式解析和数学计算的过程。这个任务需要我们将用户输入的一段类似“1*2+3-4/4”的字符串解析成可执行的数学表达式,并计算出结果。下面,我们将详细讨论实现...
1. `expression`:这是`switch`语句的核心,它是一个计算后能产生整型、字符型、枚举类型或者字符串类型的表达式。根据这个表达式的值来决定执行哪个`case`下的代码。 2. `case value1`:每个`case`后面跟一个可能的...
接着,我们需要一个函数来解析输入的表达式字符串,并根据运算符的优先级创建二叉表达式树。这通常涉及前缀、后缀或中缀表达式的转换。这里以中缀表达式为例,我们可以使用栈来处理运算符: ```cpp ExpressionNode*...
而在Java和C#中,`switch`可以接受字符串(String)和其他特定类型,如枚举。 5. **优化与性能**:`switch`语句通常比一系列的`if...else if...else`语句运行得更快,因为编译器能够对`switch`进行优化,创建一个...
这一行代码将用户从控制台输入的字符串`s`转换为整型`n`,以便与`switch`语句后面的`case`子句中的整数值进行比较。 接下来,`switch`语句的主体包含一系列的`case`子句,每个子句都定义了一个可能的值以及当`...
例如,`"He is " + age + " years old."` 这样的表达式会被编译器转换为使用 `StringBuilder` 或 `StringBuffer` 的 `append()` 方法来拼接字符串,以提高性能。使用 `StringBuilder` 或 `StringBuffer` 的 `append...
1. switch语句只能用于整型变量或枚举类型变量,不能用于浮点型变量或字符串类型变量。 2. case后面的常量表达式必须是常量,不能是变量。 3. default语句是可选的,如果不存在default语句,switch语句将跳过执行。 ...
总结来说,虽然 `case` 后面不能直接跟随一个判断表达式,但可以通过使用 `switch(true)` 并结合条件表达式来实现类似的功能。同时,正确地进行数据类型转换也是编写高效且无误的 `switch` 语句的关键。
2. switch语句中不能使用浮点型和字符串,因为计算机无法精确表达浮点型数据,也无法精确枚举字符串。 3. case值一定是常量,且不可以是字符串、浮点型等。 4. 同一个switch语句中的case值不可重复,否则就会出现...
在计算机编程中,数组和字符串是基础且重要的概念。题目涉及了C语言中对字符数组和字符串的操作,以及指针的使用。以下是根据题目内容解析的相关知识点: 1. 字符数组赋值:对于字符数组,如`char c[11]`,可以使用...
根据给定文件的信息,我们可以提炼出一系列与C语言相关的知识点,包括关键字、字符常量、字符串处理、指针操作、算术运算、控制结构等。接下来将对这些知识点进行详细的阐述。 ### 关键字 #### (1) C语言中的合法...
2. **字符串匹配**:从C# 7.0版本开始,可以直接使用字符串作为`switch`表达式。 ```csharp string color = "red"; switch (color) { case "red": Console.WriteLine("红色"); break; case "blue": Console....
每个`case`后面的字符串是匹配条件,`break`语句用于跳出当前`switch`语句,`default`则用于处理没有匹配任何`case`的情况。这种用法展示了`switch`在处理多个条件分支时的灵活性和效率。 在实际编程中,枚举常用于...
- 表达式的类型可以是整型(int、short、byte、long)、字符型(char)、字符串(string)以及枚举(enum)类型。自C# 7.0起,还可以使用元组(tuple)进行匹配。 - case后的常量表达式必须是编译时常量,并且每个...