蛋痛。这个三级的题目,求解释
蛋疼。这个三级的题目,求解释。未来教育的那个三级2012上机软件的题;题目是这样的,函数ReadDat()的功能是实
蛋疼。这个三级的题目,求解释。
未来教育的那个三级2012上机软件的题;
题目是这样的,函数ReadDat()的功能是实现从文件IN.DAT中读取一篇英文文章存入字符串数组xx中。请编写函数StrCharJL();该函数的功能是:以行为单位把字符串中的所有字符的ASCII值左移4位。如果左移后。其字符的ASCII值小于等于32或者大于等于100,则原字符保持不变,否则就把左移后的字符ASCII值再加上原字符的ASCII值,得到的新字符仍存入到原字符串对应的位置。最后把处理的字符串。。。。题目后面不是重点,省略了。
这是他给的答案。疑问在最后一个语句。为什么是xx[i][j]+=4???题目翻译过来不是应该是xx[i][j]+=xx[i][j]<<4;吗?可是我写的运行一串乱码,肯定不合题意了。。。求解释。
void StrCharJL(void)
{
int i,j; /*定义循环控制变量*/
int str;
char ch;
for(i=0;i<maxline;i++) /*以行为单位获取字符*/
{
str=strlen(xx[i]); /*求得当前行的字符串长度*/
for(j=0;j<str;j++)
{
ch=xx[i][j]<<4;
if(ch<=32 || ch>100)
continue; /*如果左移4位后字符的ASCII值小于等于32或大于100,则原字符保持不变*/
else
xx[i][j]+=4; /*否则就把左移后的字符ASCII值加上原字符的ASCII*/
}
}
}
[解决办法]xx[i][j]+=xx[i][j]<<4;
题目意思理解错了呗。你这个是乘以16。。。。按你的理解运算完之后,没几个字符在32到100里面。
[解决办法]1<<1,1左移1位,相当于乘以2,即 0001 -》0010。这相,以此xx[i][j]<<4,相当于乘以2^4=16;
楼主去了解下,位运算。
[解决办法]对的
[解决办法]调试看看最终的字符数组每个字节有无异常?是不是unicode格式的数组?最好把最终的字节数组内容都帖出来