烟大计科期末 问题 A: 期末-搞点颜色
题目描述
在计算机中,颜色经常用数字量来表示。计算机中表示颜色有两种方式,一是使用RGB三原色值(0255,0255,0~255),二是使用三原色的十六进制。 例如#FFFFFF和RGB(255,255,255),他们表示的颜色是相同的。
输入
十六进制表示的颜色值 ,且字母都为大写
输出
RGB三原色,使用逗号(英文)分隔
样例输入
copy
#370B16
样例输出
55,11,22
提示
在16进制中,A=10,B=11,…,F=15
样例解释:55=316+7,11=016+B,22=1*16+6
//先把一个两位的十六进制数转化成十进制的数
#include<stdio.h>
#include<string.h>
int zh(char str[])
{
int t,a=0,i;
for(i=0;i<2;i++)
{
if(str[i]<='9')
t=str[i]-'0';
else {t=str[i]-'A'+10;}
a=a*16+t;
}
return a;
}
//通过strncpy函数的复制功能,分别提取出来这三个 两位的十六进制数 ,并且把他们转化成十进制
int main()
{
char str[50];
scanf("%s",&str); // 输入的颜色
char str1[50],str2[50],str3[50];
int s1,s2,s3;//储存结果
strncpy(str1,str+1,2);//从str的第二位开始复制两位
strncpy(str2,str+3,2);
strncpy(str3,str+5,2);
s1=zh(str1);s2=zh(str2);s3=zh(str3);//调用函数算出来
printf("%d,%d,%d",s1,s2,s3);
return 0;
}
//呜呜呜呜我自己搞了一堆这么麻烦结果看了一眼别人的竟然用个%x%d转化一下就可以,摘录如下
#include<stdio.h>
int main()
{
int a,b,c;
scanf("#%2x%2x%2x",&a,&b,&c);
printf("%d,%d,%d",a,b,c);
return 0;
}
输出的亚子:
此题收获:
1.C语言的单引号实际上时将 ’ ’ 内的字符转化为ASCII码对应的整型值,并且在存储时占据一个字节
如:‘b’-'a’输出的结果就是1 (也因为这个点搞清了上面十六进制转化为十进制)
2.strncpy函数
用法:strncpy(str1,str2,3); //表示把str2字符串的前三位复制到str1里面去
🔺如果想str2的第几位开始复制,在“str2”后面加上数字即可,例:strncpy(str1,str2+1,3):从str2的第二位