函数ReadDat()实现从文件IN。DAT中读取一篇英文文章存入到字符串数组xx中,请编制函数StrCharJL(),其功能是:以行为单位把字符串中所有字符的ASCII值左移4位,如果左移后,其字符的ASCII值小于等于32或大于100,则原字符保持不变,否则就把左移后的字符ASCII值再加上原字符ASCII值,得到的新字符仍存入原字符串对应的位置上。最后把已处理的字符串仍按行重新存入字符串数组xx中,最后调用函数WriteDat()把结果xx输出到文件OUT。DAT中。
原始数据文件存放的格式是:每行的宽度均小于80个字符(含标点符号和空格)。
注意:部分程序已经给出。
StrCharJL()是自己写的··其他的部分已经给出
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include<windows.h>
char xx[50][80];
int maxline=0;
int ReadDat(void);
void WriteDat(void);
void StrCharJL(void)
{
int i,j;
int str;
for(i=0;i<maxline;i++)
{
str=strlen(xx[i]);
for(j=0;j<str;j++)
if((xx[i][j]<<4)<=32||(xx[i][j]<<4)>100)
continue;
else
xx[i][j]=xx[i][j]+xx[i][j]<<4;
}
}
void main()
{
system("cls");
if(ReadDat()){
printf("数据文件IN.DAT不能打开!\n\007");
return;
}
StrCharJL();
WriteDat();
}
int ReadDat(void)
{
FILE *fp;
int i=0;
char *p;
if((fp=fopen("IN.DAT","r"))==NULL) return 1;
while(fgets(xx[i],80,fp)!=NULL){
p=strchr(xx[i],'\n');
if(p)*p=0;
i++;
}
maxline=i;
fclose(fp);
return 0;
}
void WriteDat(void)
{
FILE *fp;
int i;
system("cls");
fp=fopen("OUT7.DAT","w");
for(i=0;i<maxline;i++){
printf("%s\n",xx[i]);
fprintf(fp,"%s\n",xx[i]);
}
fclose(fp);
}
我写完之后 通过编译之后执行 得到的CMD框显示的不是更改后的文章··
求高手指点错误 谢谢··
StrCharJL函数有问题吗?
关于C语言的 位运算问题
答案:2 悬赏:80 手机版
解决时间 2021-04-28 22:04
- 提问者网友:风月客
- 2021-04-28 07:38
最佳答案
- 五星知识达人网友:一袍清酒付
- 2021-04-28 07:56
以行为单位把字符串中所有字符的ASCII值左移4位,如果左移后,其字符的ASCII值小于等于32或大于100,则原字符保持不变,否则就把左移后的字符ASCII值再加上原字符ASCII值,得到的新字符仍存入原字符串对应的位置上。
-------------------------------------------------
英文字母的ASCII码范围是65~122,空格忘了是30还是33,回车是13换行是10,请问你文章字符的ASCII左移4位(左移时会隐式转换成整形,相当于乘16却不会溢出)后还在32~100的区间?
全部回答
- 1楼网友:雾月
- 2021-04-28 08:46
我会,就不告诉嫩~
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯