在进行一个C语言编程实践操作中,设计编程情景如下:读取指定文件内容存放字符数组中并且在每两个字符间隔插入一个空格然后输出在一个新建文件。
解决问题的关键:插入空格的规律是一个首项为2方差为3的等差数列。
需要注意的是插入空格会导致原有的数组序列改变,每次循环赋值需要考虑是插入空格还是真实的数据。
插入空格后再插入第一个真实数据需要注意避免与第二个真实数据的位置因循环计数设计导致的冲突。
代码实现如下:
// test.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void main()
{
unsigned int i,j,datalen,times,k=0,m=0,n=0;
FILE *fpsrc;
FILE *fptag;
char readbuf[1000],*readbufptr=readbuf,writebuf[1000],*writebufptr=writebuf;
//gets(readbuf);
fpsrc=fopen("E:\\read.txt","r");//read a txt
printf("读取的字符串:\n");
//fscanf(fpsrc,"%s",readbuf);
while(fgets(readbuf,1024,fpsrc)!=0) /*从文件中读取字符串并存放到字符数组str中,测试是否已读完*/
{
printf("%s",readbuf); /*把数组str中的字符串输出到屏幕上*/
}
printf("\n"); /*换行*/
fclose(fpsrc);
for(i=0;*(readbuf+i);i++)
{
datalen=i;//读取的字符长度,从0开始
}
printf("%d",datalen);
printf("\n");
for(i=0,j=0,m=0,times=1,n=0;i<=datalen*2;i++)
{
//在原始数据序列中每隔两个字符插入空格是一个等差数列
if(i==(2+3*(times-1)))
{
times++;
j++;//空格数
m=i;
*(writebufptr+m)=' ';
}
else
{
n++;//真实原始数据被赋值次数
//写入数组需要增加插入的空格数,因为空格改写了数据的原始顺序
*(writebufptr+n+j-1)=*(readbufptr+n-1);
}
}
printf("%s",writebuf);
printf("\n");
fptag=fopen("E:\\write.txt","w");//write a txt
if(fptag==0)
{
printf("cannot open file\n");
exit(0);
}
else
{
fputs(writebuf,fptag);
//fputs("\n",fptag); /*在文件中加入换行符作为字符串分隔符*/
}
fclose(fptag);
}
本程序涉及到c语言的相关知识
1.fopen文件操作