C语言数组的相关问题

来源:百度知道 编辑:UC知道 时间:2024/05/22 19:14:03
有一个字符数组:
unsigned char ch[] = "3536373839";
unsigned char ch1[20];
现在要实现这样的效果,在ch这个字符串中,让39-33,38-33,37-33,36-33,35-33,然后把结果:0605040302组成一个字符串并赋值给ch1。

请高手给出相关程序的Demo,谢谢!
当然,数字39,38,37,36,35等不是固定的,不过都是一个字节(两位)。 33是固定的

再补充:39,38,37,36,35,等等都是十六进制的,33也是十六进制的。ch这个串中分解的数字(即39,38之类的数字)可能有比0x33更小的,如00x12之类.

首先你需要知道ch[]有几个数,比如10个
#define N 10
#define a 33
main()
{
int b,c;
char ch[]="3536373839";
char ch1[20]={0};
for(i=0;i<N;i+=2)
{
b=(ch[i]-48)*10+(ch[i+1]-48);
c=b-a;
if(c<10&&c>0) {ch1[i]='0';ch1[i+1]=c+48;}
else if(c>9) {ch1[i]=c/10+48;ch1[i+1]=c%10+48;}
}
printf("%s\n",ch1);
}
ch[]你可以改,a=33也可以改
如果相减为负数,在ch1为0x00
纠正你一个问题,char型不是数,所有不需要unsigned
如果有问题,还可以提问

int ToSub = 33;
int sub1 = ToSub/10;
int Sub2 = ToSub%10;
int count = sizeof(ch)/2;
int i, j;
for (i=0, j=count-1; i<count; ++i, --j)
{
ch1[2*i] = ch[2*j] - sub1;
ch1[2*i+1] = ch[2*j+1] - sub2;
}

它的意思是33也必须从数组ch中得!

赋值运算。
int i;
for(i=1;i<=20;i++)
chi[i]=ch[i]-33;

把ch的每个字符都减数字3即可.
char * p=ch;
char * q=ch1;
while(*p)
{
*q=*p-3;
p++;
q++;
}
这样很清晰