c语言 switch判断字符串【字符集与数字互转】

c语言 switch判断字符串

首先我想说的是,很多人看到这个标题是不是就会立即联想到这个标题很可能是伪命题。但是先别急着下结论,首先来看看我是怎么理解的。
因为c语言中switch里面很难放进字符串,所以才联想到要发表一篇这个文章来抢先吃c语言的螃蟹。

#define toasc(c) (((unsigned char)(c))&0x7f)
//上面的方法只能放进去一个char字符,并不能把char字符组全部转换成int
//下面的方法是上面的反方法,将ASCII码也就int类型转换成单字符的方法
unsigned char * cc = (unsigned char *)100;//此时cc是'd',小写字母d
  
//将char字符集转换成数字
int from_str(const char*s){
  int r=0;for(int i=0;s[i]!='\0';r*=256,r+=s[i++]);return r;
}
//逆向数字变回字符集的方法
static char ASCII[97]= " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~";
char*to_str(int i){
  int t=i/0x100,b=i-t*0x100-32,z=i>8355711?5:i>32639?4:i>127?3:2;
  char*w=(char*)malloc(sizeof(char)*z);w[--z]='\0';
  while(t>127){
    w[--z]=ASCII[b];i=t;t=i/0x100;b=i-t*0x100-32;
  }
  w[--z]=ASCII[b];if(z>0){t-=32;w[0]=ASCII[t];}
  return w;
}
//判断的时候case里面用单引号,那样字符就会是ASCII码,也就int类型。
char c[5];scanf("%s",&c);
switch (from_str(c)){
  case 'wwzz':
  printf("%s\n",to_str(from_str("wwzz")));
  break;
  case 'hook':/* 比方说当c是'hook'的时候,在此处写逻辑 */
  break;
  default:break;
  }
  //这样就完美解决了switch结构放不进字符串变量的问题

单引号中最多只能容纳4个,再多了就会出现字符串常量过大的问题。

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页