實作from_str()將連接后的字符轉為int整型
首先我們要實作一個將由單引號擴住的字串變為int整型的from_str方法,再此之前的先實作substring方法來篩選字串段落,
#include<string.h>
char*substring(const char*c,int i,int e){
char *w = malloc(sizeof(char)*97);int p = 0;
for(;i<e;++i) w[p++]=c[i];w[p] = '\0';
return w;
}
static char chars[97]= " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~";//根據ascii排列得到
int from_str(const char*oid){//傳入字串oid,i表示oid最后的一位索引值
int this=0,i=sizeof oid/2-1,j,pow_256=1;
while (i>=0){//回圈oid的每一位賦值給chr
char*chr=substring(oid,i,i+1);j=0;
while (j<75){//回圈chars的每一位看看有沒有跟chr一樣的
char*s=substring(chars,j,j+1);
if(strcmp(chr,s)==0){
this=this+(j+32)*pow_256;
pow_256=pow_256*256;free(s);break;//找到一樣的立馬彈出當前累積的ascii
}
free(s);j+=1;
}
free(chr);i-=1;//用完了釋放指標記憶體
}
return this;
}
實踐題目:剪刀石頭布(要求使用ascii碼來判定)
輸入
? 輸入兩個字符 a,b 分別表示小明和李華所出手勢,′′O′′,′′Y′′,′′H′′ 分別表示石頭剪刀布,
輸出
? 如果小明贏了則輸出 MING,如果李華贏了則輸出 LI 如果平局則輸出 TIE,
完整代碼如下:
#include<stdio.h>
#include<string.h>
char*substring(const char*c,int i,int e){
char *w = malloc(sizeof(char)*97);int p = 0;
for(;i<e;++i) w[p++]=c[i];w[p] = '\0';
return w;
}
static char chars[97]= " !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~";
int from_str(const char*oid){
int this=0,i=sizeof oid/2-1,j,pow_256=1;
while (i>=0){
char*chr=substring(oid,i,i+1);j=0;
while (j<75){
char*s=substring(chars,j,j+1);
if(strcmp(chr,s)==0){
this=this+(j+32)*pow_256;
pow_256=pow_256*256;free(s);break;
}
free(s);j+=1;
}
free(chr);i-=1;
}
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 (size_t i = 0; s[i]!='\0'; ++i){
r*=256;r+=s[i];
}
printf("0x%02x\n",r);//列印十六進制ASCII
printf("%d",r);//列印十進制ASCII
return r;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/267507.html
標籤:其他
上一篇:EfficientNet網路詳解
下一篇:安裝虛擬環境—手把手教學
