首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

蛋痛。这个三级的题目,求解释

2013-03-01 
蛋疼。这个三级的题目,求解释。未来教育的那个三级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;

楼主去了解下,位运算。

引用:
引用:
未来教育的那个三级2012上机软件的题;
题目是这样的,函数ReadDat()的功能是实现从文件IN.DAT中读取一篇英文文章存入字符串数组xx中。请编写函数StrCharJL();该函数的功能是:以行为单位把字符串中的所有字符的ASCII值左移4位。如果左移后。其字符的ASCII值小于等于32或者大于等于100,则原字符保持不变,否则就把左移后的字符ASCII值再加上原字……

[解决办法]
对的
引用:
引用:
1<<1,1左移1位,相当于乘以2,即 0001 -》0010。这相,以此xx[i][j]<<4,相当于乘以2^4=16;

楼主去了解下,位运算。


引用:
引用:
未来教育的那个三级2012上机软件的题;
题目是这样的,函数ReadDat()的功能是实现从文件IN.DAT中读取一篇英文文章存入字符串数组xx中。请编写函数S……

[解决办法]
调试看看最终的字符数组每个字节有无异常?是不是unicode格式的数组?最好把最终的字节数组内容都帖出来

热点排行