将文件中各行的第21个字符复制到新文件,如果该行没有21个字符,则复制该行的最后一个字符。
while(in.get(achar))
{
int c++;
if(achar=='\n')
{c=0;}
if(c==21)
{
out.put(achar);
}
}
前两个功能我做出来了,可是当该行不足21个字符时复制最后一个字符的功能不知道如何实现,请高手指点
[此贴子已经被作者于2006-6-26 13:43:49编辑过]
谢谢,我明白你的意图,就是当读到回车的时候进行判断C<=21,然后写入
不过这样会有个BUG ,如果该文件有3行
如 123
456
789
由于第三行并没有回车输入,你只能将3 6 写入文件,也就是说该程序写不了没有回车的一行.
你有什么改进的方法吗?谢谢
[此贴子已经被作者于2006-6-26 13:44:07编辑过]
貌似这么写不行吧
D:\C++平台控制台程序\ewr.cpp(23) : error C2146: syntax error : missing ',' before identifier 'finish'
D:\C++平台控制台程序\ewr.cpp(25) : error C2146: syntax error : missing ';' before identifier 'found'
D:\C++平台控制台程序\ewr.cpp(25) : error C2065: 'found' : undeclared identifier
有3个错误,程序也没有什么没有定义,可能FOR语句有问题
改了,可是还是算不了没有回车的那一行,以下是原代码,你试一下.
#include <iostream>
#include <iomanip>
#include <fstream>
using namespace std;
void main()
{
ifstream in;
in.open("c:\\text.txt");
if(!in)
{
cerr<<"\aCan't open the File"<<endl;
exit(100);
}
ofstream out;
out.open("c:\\text1.txt");
if(!out)
{
cerr<<"\aCan't whrte the File"<<endl;
exit(102);
}
bool finish=false;
for(int c=1;!finish;c++)
{
char achar,temp;
static bool found=false;
if(!in.get(achar))finish=true;
if(achar=='\n'||achar==EOF){c=1;found=true;}
if(achar!='\n'&&c<=21&&achar!=EOF)temp=achar;
else
{
if(found){out.put(temp);found=false;}
}
}
}
恩,的确是这样,目前不知道哪里有问题,aogun说说看
我讨厌get方法和一个一个char的分析,你们试试下面这个(要回家了,写得比较急,可能有错误):
[CODE]void main()
{
ifstream in;
in.open("c:\\text.txt");
if(!in)
{
cerr<<"\aCan't open the File"<<endl;
exit(100);
}
ofstream out;
out.open("c:\\text1.txt");
if(!out)
{
cerr<<"\aCan't whrte the File"<<endl;
exit(102);
}
bool finish=false;
char achar[80];
int iLength;
while(!in.eof())
{
memset(achar, 0, sizeof(achar));
in.getline(achar, 80); //直接读一行出来
iLength = strlen(achar);
if (iLength >= 21) //判断这一行的字符数是否大于或者等于21个
{
out<<achar[20]<<endl; //输出第21个字符
}
else
{
if (--iLength >= 0) //如果字符数为1到20,则输出最后一个
out<<achar[iLength]<<endl;
else //否则改行为空行,直接输出换行符
out<<endl;
}
}
}[/CODE]