实现from_str()将连接后的字符转为int整型

首先我们要实现一个将由单引号扩住的字符串变为int整型的from_str方法,再此之前的先实现substring方法来筛选字符串段落。

int strLen(const char*s){const char*e=s;while(*s!='\0')++s;return s-e;}
static char ASCII[97]= " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~";
char*substring(const char*c,int i,int e){char *w=(char*)malloc(sizeof(char)*(e-i));int p = 0;for(;i<e;)w[p++]=c[i++];w[p]='\0';return w;
}
int from_str(const char*oid){//传入字符串oidint this=0,i=strLen(oid),j,pow_256=1;while (i-->0){//循环oid的每一位赋值给chrchar*chr=substring(oid,i,i+1);j=0;while (j++<97){//循环chars的每一位看看有没有跟chr一样的char*s=substring(ASCII,j-1,j);if(strcmp(chr,s)==0){this=this+(j+31)*pow_256;pow_256=pow_256*256;free(s);break;//找到一样的立马弹出当前累积的ascii}free(s);}free(chr);//用完了释放指针内存}return this;
}

实践题目:剪刀石头布(要求使用ascii码来判定)

输入
​ 输入两个字符 a,b 分别表示小明和李华所出手势。′′O′′,′′Y′′,′′H′′ 分别表示石头剪刀布。

输出
​ 如果小明赢了则输出 MING,如果李华赢了则输出 LI 如果平局则输出 TIE。

完整代码如下:

#include<stdio.h>
#include<string.h>
int strLen(const char*s){const char*e=s;while(*s!='\0')++s;return s-e;}
static char ASCII[97]= " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~";
char*substring(const char*c,int i,int e){char *w=(char*)malloc(sizeof(char)*(e-i));int p = 0;for(;i<e;)w[p++]=c[i++];w[p]='\0';return w;
}
int from_str(const char*oid){int this=0,i=strLen(oid),j,pow_256=1;while (i-->0){char*chr=substring(oid,i,i+1);j=0;while (j++<97){char*s=substring(ASCII,j-1,j);if(strcmp(chr,s)==0){this=this+(j+31)*pow_256;pow_256=pow_256*256;free(s);break;}free(s);}free(chr);}return this;
}
int main(){char a[2],b[2],c[4];int f;scanf("%s %s",&a,&b);//先读入出的剪刀石头布的大写字母表示sprintf(c,"%s%s",a,b);//连接这两个大写字母并存入c中switch (from_str(c)){//使用from_str将连接后的字符转为int整型case 'HO':f=2;break;case 'OH':f=1;break;case 'OY':f=2;break;case 'YO':f=1;break;case 'YH':f=2;break;case 'HY':f=1;break;default:f=0;break;}printf(f==2?"MING":f==1?"LI":"TIE");
}

优化的代码解决,来自一位热心匿名群友的代码方案


int from_str(const char*s){int r=0;for(int i=0;s[i]!='\0';r*=256,r+=s[i++]);return r;
}printf("0x%02x\n",from_str("wwzz"));//打印十六进制ASCII
printf("%d\n",from_str("hook"));//打印十进制ASCII

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

c语言 由字符串转ASCII码相关推荐

  1. C语言 用字符串打印ASCII码值

    假设要转换以下ASCII码为对应字符并输出他们. 73, 32, 99, 97, 110, 32, 100, 111, 32, 105, 116 , 33 #include <stdio.h&g ...

  2. C语言输出字符,字符串的ASCII码的16进制数

    C语言输出字符,字符串的ASCII码的16进制数 /* file name : test.c cmd code : gcc -o test.exe test.c */ #include<stdi ...

  3. MATLAB字符串和ASCII码的转换

    字符串转ASCII码:abs,如:abs('a');abs('what'); ASCII码转字符串:char,如:char(97);char([97,98,99]);

  4. python 字符串与ASCII码转换的脚本

    这里写自定义目录标题 #!/usr/bin/python coding=utf-8flag = 1 while flag:print(">>=================== ...

  5. python字符串按ascii码排序_C# 字符串按 ASCII码 排序的方法

    在和银行做数据对接时,涉及到数据传输时的验签及加密.其中数据签名方案中就要求数据项根据属性名按 ASCII码 进行升序排序.C#中的ASCII码排序并不是表面上那么简单,一不小心就入坑了.因为C#的排 ...

  6. c语言汉字的ascii,C语言中两位ASCII码可以表示汉字

    ******************************************************** 现在开始分析: 资料一说: "206 210 176 174 214 236 ...

  7. 字符串转Ascii码与Ascii码转字符串

    字符串转Ascii码 private static String convert(String str) { String tmp;  StringBuffer sb = new StringBuff ...

  8. String字符串和ascii码互转

    String字符串和ascii码互转 直接复制就可以 代码 public static void main(String[] args) {String str="我的博客";St ...

  9. c# 字典按ascii 排序_C# 字符串按 ASCII码 排序的方法

    在和银行做数据对接时,涉及到数据传输时的验签及加密.其中数据签名方案中就要求数据项根据属性名按 ASCII码 进行升序排序.C#中的ASCII码排序并不是表面上那么简单,一不小心就入坑了.因为C#的排 ...

最新文章

  1. HTML中单选框的设置,和提交按钮之间的组合
  2. 新站优化工作还有一点点补充内容!
  3. (转)LINQ to Entities 多条件动态查询
  4. python + MySql 基本操作
  5. 程序员,想要彻底弄懂Redis,这15点你一定要明白~(纯干货)
  6. View onRestoreInstanceState ClassCastException
  7. 多线程调用同一个方法,局部变量会共享吗
  8. Android 实现手写板技术
  9. 敏捷测试与传统测试的区别
  10. HDU2005 第几天?【日期计算】
  11. 7月11日安全沙龙演讲主题漏洞与网站挂马
  12. 联想计算机M.2固态银盘,联想ThinkPad T14拆机加装内存和M.2固态硬盘
  13. itext修改pdf文字
  14. openpyxl给excel设置条件格式
  15. 《视觉SLAM十四讲》详细笔记
  16. php话费充值接口对接,基于PHP的聚合数据手机话费充值API调用代码示例
  17. 医疗核心关键词排名,为什么说要用百家号做
  18. 2016-3-14恬淡努力的一天
  19. html css设计网页初步
  20. 乐视还有400多位员工?过着没有老板的神仙日子 官方出来回应了...

热门文章

  1. polyline与polygon
  2. 数字麦克风灵敏度信噪比等指标解读
  3. Android中ButterKnife的使用
  4. python实现检查邮箱格式是否正确,并检查提交的文件格式是否正确
  5. 富途证券 8.14
  6. 优胜劣汰,WiFi会被5G淘汰吗?
  7. 骨传导蓝牙耳机排行榜、精选五款骨传导耳机品牌推荐
  8. php continue什么意思,php switch continue 什么意思??
  9. 化龙小型汽车考场手动挡C1科目二考试技巧(全网唯一最详细教程)
  10. C# Lambda 表达式