关于c语言字符串转换的有关问题
关于c语言字符串转换的问题
我写了两个函数,希望实现相同的功能。就是对满足条件的字符进行替换。但是两个函数输出结果却不一样。我也不知道出什么问题了。
1.
void encryptChar()
{
int i,j,len;
char pf;
for(i=0;i<maxline;i++){
len=strlen(xx[i]);
for(j=0;j<len;j++){
pf=xx[i][j]*11%256;
if((pf<=32)||(pf>='0'&&pf<='9'))
;
else
xx[i][j]=pf;
}
}
}
2.
void encryptChar()
{
int i,j,len;
for (i=0; i<maxline; i++)
{
len=strlen(xx[i]);
for(j=0;j<len;j++){
if ((xx[i][j]*11%256>='0' && xx[i][j]*11%256<='9') || xx[i][j]*11%256<=32)
;
else
xx[i][j]= xx[i][j]*11%256;
}
}
}
第二个出的是正确的结果。为什么呢?
我又改写了一下,
void encryptChar()
{
int i,j,len;
char pf;
for(i=0;i<maxline;i++){
len=strlen(xx[i]);
for(j=0;j<len;j++){
pf=xx[i][j]*11%256;
//if((pf<=32)||(pf>='0'&&pf<='9'))
if((xx[i][j]*11%256<=32)||(xx[i][j]*11%256>='0'&&xx[i][j]*11%256<='9'))
;
else
xx[i][j]=pf;
}
}
}
为什么第二个if就能出正确的结果呢?
第一个if为什么就不行呢?
第一个if修改了什么了么?
------解决方案--------------------
貌似char类型做乘法的时候溢出了吧,改成int pf或者unsigned char pf试试,然后自己做类型转换
对于xx[i][j]*11%256 >= '0',不知道编译器是怎么转换类型的,楼下继续
------解决方案--------------------
xx[i][j]*11%256是整型数,该数大于等于0且小于256,将其赋给char型变量时,如果是128~255之间时,转换后是负数(<=32),而未转换之前是正数。
我写了两个函数,希望实现相同的功能。就是对满足条件的字符进行替换。但是两个函数输出结果却不一样。我也不知道出什么问题了。
1.
void encryptChar()
{
int i,j,len;
char pf;
for(i=0;i<maxline;i++){
len=strlen(xx[i]);
for(j=0;j<len;j++){
pf=xx[i][j]*11%256;
if((pf<=32)||(pf>='0'&&pf<='9'))
;
else
xx[i][j]=pf;
}
}
}
2.
void encryptChar()
{
int i,j,len;
for (i=0; i<maxline; i++)
{
len=strlen(xx[i]);
for(j=0;j<len;j++){
if ((xx[i][j]*11%256>='0' && xx[i][j]*11%256<='9') || xx[i][j]*11%256<=32)
;
else
xx[i][j]= xx[i][j]*11%256;
}
}
}
第二个出的是正确的结果。为什么呢?
我又改写了一下,
void encryptChar()
{
int i,j,len;
char pf;
for(i=0;i<maxline;i++){
len=strlen(xx[i]);
for(j=0;j<len;j++){
pf=xx[i][j]*11%256;
//if((pf<=32)||(pf>='0'&&pf<='9'))
if((xx[i][j]*11%256<=32)||(xx[i][j]*11%256>='0'&&xx[i][j]*11%256<='9'))
;
else
xx[i][j]=pf;
}
}
}
为什么第二个if就能出正确的结果呢?
第一个if为什么就不行呢?
第一个if修改了什么了么?
------解决方案--------------------
貌似char类型做乘法的时候溢出了吧,改成int pf或者unsigned char pf试试,然后自己做类型转换
对于xx[i][j]*11%256 >= '0',不知道编译器是怎么转换类型的,楼下继续
------解决方案--------------------
xx[i][j]*11%256是整型数,该数大于等于0且小于256,将其赋给char型变量时,如果是128~255之间时,转换后是负数(<=32),而未转换之前是正数。