c语言 由字符串转ASCII码
实现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码相关推荐
- C语言 用字符串打印ASCII码值
假设要转换以下ASCII码为对应字符并输出他们. 73, 32, 99, 97, 110, 32, 100, 111, 32, 105, 116 , 33 #include <stdio.h&g ...
- C语言输出字符,字符串的ASCII码的16进制数
C语言输出字符,字符串的ASCII码的16进制数 /* file name : test.c cmd code : gcc -o test.exe test.c */ #include<stdi ...
- MATLAB字符串和ASCII码的转换
字符串转ASCII码:abs,如:abs('a');abs('what'); ASCII码转字符串:char,如:char(97);char([97,98,99]);
- python 字符串与ASCII码转换的脚本
这里写自定义目录标题 #!/usr/bin/python coding=utf-8flag = 1 while flag:print(">>=================== ...
- python字符串按ascii码排序_C# 字符串按 ASCII码 排序的方法
在和银行做数据对接时,涉及到数据传输时的验签及加密.其中数据签名方案中就要求数据项根据属性名按 ASCII码 进行升序排序.C#中的ASCII码排序并不是表面上那么简单,一不小心就入坑了.因为C#的排 ...
- c语言汉字的ascii,C语言中两位ASCII码可以表示汉字
******************************************************** 现在开始分析: 资料一说: "206 210 176 174 214 236 ...
- 字符串转Ascii码与Ascii码转字符串
字符串转Ascii码 private static String convert(String str) { String tmp; StringBuffer sb = new StringBuff ...
- String字符串和ascii码互转
String字符串和ascii码互转 直接复制就可以 代码 public static void main(String[] args) {String str="我的博客";St ...
- c# 字典按ascii 排序_C# 字符串按 ASCII码 排序的方法
在和银行做数据对接时,涉及到数据传输时的验签及加密.其中数据签名方案中就要求数据项根据属性名按 ASCII码 进行升序排序.C#中的ASCII码排序并不是表面上那么简单,一不小心就入坑了.因为C#的排 ...
最新文章
- HTML中单选框的设置,和提交按钮之间的组合
- 新站优化工作还有一点点补充内容!
- (转)LINQ to Entities 多条件动态查询
- python + MySql 基本操作
- 程序员,想要彻底弄懂Redis,这15点你一定要明白~(纯干货)
- View onRestoreInstanceState ClassCastException
- 多线程调用同一个方法,局部变量会共享吗
- Android 实现手写板技术
- 敏捷测试与传统测试的区别
- HDU2005 第几天?【日期计算】
- 7月11日安全沙龙演讲主题漏洞与网站挂马
- 联想计算机M.2固态银盘,联想ThinkPad T14拆机加装内存和M.2固态硬盘
- itext修改pdf文字
- openpyxl给excel设置条件格式
- 《视觉SLAM十四讲》详细笔记
- php话费充值接口对接,基于PHP的聚合数据手机话费充值API调用代码示例
- 医疗核心关键词排名,为什么说要用百家号做
- 2016-3-14恬淡努力的一天
- html css设计网页初步
- 乐视还有400多位员工?过着没有老板的神仙日子 官方出来回应了...