1.利用标准IO 实现拷贝文件功能
思路分析:
打开一个文件,读取文件内的内容,接着把读取的内容一个字节一个字节地写在要拷贝的文件上。
#include <stdio.h>
#include <sys/ioctl.h>
// 利用标准IO 实现拷贝文件功能,类似 cp xxx xxx
int main(int argc, char *argv[])
{
// 打开一个文件,要求文件必须存在
FILE *fp1 = fopen(argv[1], "r+");
if (!fp1)
{
printf("%s不存在!\n", argv[1]);
return -1;
}
// 打开一个文件,文件不存在就创建,存在就内容清空
FILE *fp2 = fopen(argv[2], "w+");
if (!fp2)
{
printf("%s打开失败!\n", argv[2]);
return -1;
}
char ch;
int blockSize;
while (1)
{
blockSize = fread(&ch, 1, 1, fp1);//一个字节一个字节地读
if(blockSize <= 0)
{
break;
}
fwrite(&ch,1,1,fp2);//一个字节一个字节地写
}
fclose(fp1);
fclose(fp2);
return 0;
}
2.利用标准IO 实现文本内的数据反转
思路分析:
打开一个文件,利用数组计算,一字节一字节读的过程中文本的长度;然后通过数组的长度逆序写在文本中
#include <stdio.h>
#include <sys/ioctl.h>
// 利用标准IO 实现文本内的数据反转
int main(int argc, char *argv[])
{
// 打开一个文件,要求文件必须存在
FILE *fp = fopen(argv[1], "r+");
if (!fp)
{
printf("%s不存在!\n",argv[1]);
return -1;
}
char ch[1024];
int blockSize;
int i = 0;
while (1)
{
blockSize = fread(&ch[i], 1, 1, fp);
if (blockSize <= 0)
{
break;
}
i++;
}
fclose(fp);//关闭文件
i -= 1;
//重新打开文件
FILE *fp1 = fopen(argv[1], "r+");
while (i >= 0)
{
fwrite(&ch[i], 1, 1, fp1);
i--;
}
fclose(fp1);
return 0;
}
3.利用标准IO 获取文本中单词的个数
思路分析:(单个字母或连续的字母都算1个单词)
重点是要添加一个标志位,来让连续的字母只是记作一个单词
打开一个文件,在读文件的内容时,判断当前字符是否为字母,若是且标志位为0,则单词数量加1,标志位j加1;若不是,则让标志位为0
根据此操作,则可求出单词的个数。
#include <stdio.h>
#include <sys/ioctl.h>
// 利用标准IO 获取文本中单词的个数
int main(int argc, char *argv[])
{
// 打开一个文件,要求文件必须存在
FILE *fp = fopen(argv[1], "r+");
if (!fp)
{
printf("%s不存在!\n", argv[1]);
return -1;
}
int blockSize;
char ch[1024];
int i = 0;
int flag = 0; // 标志数
int num = 0;
while (1)
{
blockSize = fread(&ch[i], 1, 1, fp);
if (blockSize <= 0)
{
break;
}
if ((ch[i] >= 'a' && ch[i] <= 'z') || (ch[i] >= 'A' && ch[i] <= 'Z'))
{
if (flag == 0)//flag == 1表示有2个或2个以上字母才算单词
{
num++;
}
flag++;
}
else
{
flag = 0;
}
if (blockSize <= 0)
{
break;
}
i++;
}
printf("该文本中有%d个单词\n",num);
fclose(fp);
return 0;
}
.