使用 char[2] 的 C 切换大小写

C switch case using char[2]

我正在尝试在 C 中将 switch case 与 char[2] 一起使用,但它只支持整数。

int main() {
        char c[2] = "h";
        switch (c) {
                case "h":
                        printf("done!");
        }
        return 1;
}

为了更好地理解,我想做的是:

if "h" in ")($+#&@+)#"

基本上我想做一个条件来匹配一个字符和一组字符,但效率很高,首先想到的是使用 switch case 但它只支持诠释。但是当我使用其他 Whosebug 答案中推荐的 (int)c 时,它不会 return ascii 值。

在这种情况下使用 switch 语句没有任何意义。

只需使用 <string.h> 中声明的标准函数 strchr

#include <string.h>

//...

if ( strchr( c, 'h' ) != NULL ) puts( "done!" );

您不能直接使用 switch 语句比较字符(字符串)数组,因为 switch 语句仅适用于基本类型;不是基本类型的数组。

使用 (int)c 不返回 ASCII 值的原因是因为您正在转换 char[]->int 而不是 char->int.

单引号和双引号的区别在C:

中很重要
  • 'h' 属于 char 类型,等于 104 (ASCII 中的小写 'h')
  • "h"const char* 类型,指向 2 个字符:h,& 空终止字符 [=22=]

要检查字符串中是否存在某个字符,您可以使用 strchr function as mentioned in ,或者如果您想使用 switch 语句自行完成,您可以试试这个:

int main()
{
    char c[2] = "h";
    bool found = false;
    for (int i = 0; i < 2; ++i) {
        switch (c[i]) {
        case 'h': // compare c[i] == 'h'
            found = true;
            break;
        default:
            break;
        }
    }
    if (found)
        printf("Done!");
    return 0;
}