用VC++写一个小程序,打开一个txt文件,文件里每一行是一个字符串,要求将字符串长度大于8的筛选出来
CStringArray strArr;
strArr.SetSize(150, 10);
CStdioFile mFile;
CString strText;
mFile.Open(_T("D:\\整理前
.txt"),CFile::modeReadWrite|CFile::modeNoTruncate);
for (int i=0;i<500;i++)
{
mFile.ReadString(strText);
if (strText.GetLength()>=8)
{
strArr.Add(strText);
}
}
mFile.Close();
mFile.Open(_T("D:\\整理后.txt"),CFile::modeReadWrite);
for (int i=0;i<500;i++){
mFile.WriteString(strArr.GetAt(i));
mFile.WriteString(_T("\n\r"));
}
mFile.Close(); 展开
CStringArray strArr;
//strArr.SetSize(150, 10); <=======这个地方使用SetSize,下面必须配合用SetAt(),而不能用Add, 否则记录会追加到151条去,最好去掉,暂时不用。
CStdioFile mFile;
CString strText;
mFile.Open(_T("D:\\整理前.txt"),CFile::modeReadWrite|CFile::modeNoTruncate);
for (int i=0;i<500;i++) <=======这里的for明显限制了记录条数,同时也可能造成不必要的循环
{
mFile.ReadString(strText);
if (strText.GetLength()>=8)
{
strArr.Add(strText);<========这里前面说了原因,用了SetSize,一开始的记录就加到了151条。
}
}
mFile.Close();
mFile.Open(_T("D:\\整理后.txt"),CFile::modeReadWrite);<======文件打开结果没做判定,如果打开失败,下面的WriteString就会崩溃。
for (int i=0;i<500;i++){<==========这里的for循环也太不严谨
mFile.WriteString(strArr.GetAt(i));
mFile.WriteString(_T("\n\r"));
}
mFile.Close();
把你的源代码整理了一下,试试运行一下,看解决了问题吗?没问题请采纳,谢谢:
#include <stdio.h>
#include <afxcoll.h>
#include <afx.h>
void main()
{
int i=0;
CStringArray strArr;
CStdioFile mFile;
CString strText;
if(!mFile.Open(_T("D:\\整理前.txt"),CFile::modeReadWrite|CFile::modeNoTruncate))return;
while(mFile.ReadString(strText))
{
if (strText.GetLength()>=8)
{
strArr.Add(strText);
}
}
mFile.Close();
if(!mFile.Open(_T("D:\\整理后.txt"),CFile::modeCreate|CFile::modeReadWrite))return;
for (i=0;i<strArr.GetSize();i++)
{
mFile.WriteString(strArr.GetAt(i));
mFile.WriteString(_T("\n\r"));
}
mFile.Close();
}