C语言函数设计,字符与数值间转换问题。。

来源:百度知道 编辑:UC知道 时间:2024/06/28 23:54:29
#编写一程序实现以下功能
①从键盘上读入三个字符串,规定每个字符串的长度最长为20字节(编程时不考虑用户未按要求输入)。这三个字符串中,肯定只有两个字符串为数字字符(0-9)和字母(a-f或A-F)组成且长度不超过6(前一个称之为s16_1、后一个称之为s16_2),但其是第几个则在输入时临时确定。
②将s16_1、s16_2作为两个16进制数相加,将相加的结果分别转换为小写16进制、大写16进制、二进制字符串在屏幕上显示(提示,可从itoa,ltoa中选一合适函数使用)。
程序运行的效果示例:
Please input 3 string: aasf 0123a 323B2
0123a+323B2=335ec, 335EC, 110011010111101100
考查点:函数设计,sscanf,16进制数格式,字符与数值间的转换

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
main(){
char a[3][30],tmp[30],str1[30],str2[30],str3[30];
char* b[2];
char* endstr;
int i,index=0;
long res1,res2,res;
printf("Please input 3 string: ");
scanf("%s%s%s",&a[0],&a[1],&a[2]);
for(i=0;i<3;i++)
{
sscanf(a[i],"%[0-9a-fA-F]",tmp);
if(!strcmp(tmp,a[i])) b[index++]=a[i];
}
res1=strtol(b[0],&endstr,16);
res2=strtol(b[1],&endstr,16);
res=res1+res2;
sprintf(str1,"%x",res);
sprintf(str2,"%X",res);
itoa(res,str3,2);
printf("%s+%s=%s,%s,%s\n",b[0],b[1],str1,str2,str3);
//system("pause");
}