怎么样用C++读取文本文档里的数据,数据非常多,并且对之进行处理

VC读取txt文件内容,几乎全是数,

1. 从键盘输入单词,以“end”结束输入,把接收到的单词存入文件“word.txt”,
然后再编写一个函数void copyFileTo(File *p1,File *p2),
把word..txt中的单词复制到文件word2.txt中,并统计单词个数。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void copyFileTo(FILE *p1,FILE *p2){
char ch;
ch = fgetc(p1);
while(ch != EOF){
fputc(ch,p2);
ch = fgetc(p1);
}

}
void main(){
FILE *fp,*fp2;
fp = fopen("word.txt","w");
char s[20];
scanf("%s",s);
while(strcmp(s,"end")!=0){
fprintf(fp,"%s ",s);
scanf("%s",s);
}
fclose(fp);
fp = fopen("word.txt","r");
fp2 = fopen("word2.txt","w");
copyFileTo(fp,fp2);
fclose(fp);
fclose(fp2);
}

2. 在题1的基础上,重写copyFileTo函数,void copyFileTo(File *p1,File *p2,char *s1,char *s2)
,文件p1中如果有单词s1,在存入文件2时改成s2。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void copyFileTo(FILE *p1,FILE *p2,char *s1,char *s2){
char ch[20];

while(fscanf(p1,"%s",ch)==1){
if(strcmp(ch,s1)==0){
fprintf(p2,"%s ",s2);
}
else
fprintf(p2,"%s ",ch);
}

}
void main(){
FILE *fp,*fp2;
fp = fopen("word.txt","w");
char s[20];
scanf("%s",s);
while(strcmp(s,"end")!=0){
fprintf(fp,"%s ",s);
scanf("%s",s);
}
fclose(fp);
fp = fopen("word.txt","r");
fp2 = fopen("word2.txt","w");
copyFileTo(fp,fp2,"hello","world");
fclose(fp);
fclose(fp2);
}

3. 在题1的基础上,将单词按字母序排序,排序后存入文件sortedWords.txt中。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define M 30
#define N 20
void sortWords(FILE *p1,FILE *p2){
char ch[M][N];
char temp[N];
int i=0,j=0,k=0;
while(fscanf(p1,"%s",ch[i])==1){
//strcpy(ch[i],temp);
i++;
}
for(j=0;j<i;j++)
for(k=j+1;k<i;k++)
if(strcmp(ch[j],ch[k])==1){
strcpy(temp,ch[j]);
strcpy(ch[j],ch[k]);
strcpy(ch[k],temp);
}

for(j=0;j<i;j++){
fprintf(p2,"%s ",ch[j]);
}

}
void main(){
FILE *fp,*fp2;
fp = fopen("word.txt","w");
char s[20];
scanf("%s",s);
while(strcmp(s,"end")!=0){
fprintf(fp,"%s ",s);
scanf("%s",s);
}
fclose(fp);
fp = fopen("word.txt","r");
fp2 = fopen("sortedWords.txt","w");
sortWords(fp,fp2);
fclose(fp);
fclose(fp2);
}

4. 一个文件中存有一串字母,把文件中字母‘a’改成‘b’。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void main(){
FILE *fp,*fp2;
char ch;
fp = fopen("word.txt","r+");
ch = fgetc(fp);
while(ch != EOF){
if(ch=='a'){
fseek(fp,-1L,1);
fputc('b',fp);
fseek(fp,0L,1);
}
ch = fgetc(fp);
}

fclose(fp);

}

(附加题)
统计一个文件中的单词,显示单词和出现次数。
例如文件内容如下:
happy world happy life.

结果:
happy 2
world 1
life 1

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define M 30
#define N 20

void countTimes(FILE *p1,FILE *p2){
char ch[M][N];
int times[M];
char temp[N];
int i=0,j=0,k=0;
for(j=0;j<M;j++)
times[j] = 1;
while(fscanf(p1,"%s",temp)==1){
//strcpy(ch[i],temp);

for(k=0;k<i;k++){
if(strcmp(ch[k],temp)==0)
break;
}
if(k<i){
times[k]++;
}
else{
strcpy(ch[i],temp);
i++;
}
}

for(j=0;j<i;j++){
fprintf(p2,"%s %d\n",ch[j],times[j]);
}

}
void main(){
FILE *fp,*fp2;
fp = fopen("word.txt","w");
char s[20];
scanf("%s",s);
while(strcmp(s,"end")!=0){
fprintf(fp,"%s ",s);
scanf("%s",s);
}
fclose(fp);
fp = fopen("word.txt","r");
fp2= fopen("result.txt","w");
countTimes(fp,fp2);
fclose(fp);
}

以前写的绝对可以用
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-08-04
时间和空间,通常只能节约一个,你要高效就得先把文件内容全部读入,并在读入时初步进行处理,比如按大小什么的
第2个回答  2013-08-04
用循环一个一个字节的读取啊。
第3个回答  2013-08-04
高效的方法得参考数据结构的查找这一方面的算法

怎么样用C++读取文本文档里的数据,数据非常多,并且对之进行处理
1.从键盘输入单词,以“end”结束输入,把接收到的单词存入文件“word.txt”,然后再编写一个函数void copyFileTo(File *p1,File *p2),把word..txt中的单词复制到文件word2.txt中,并统计单词个数。include <stdio.h> include <stdlib.h> include <string.h> void copyFileTo(FILE *p1,FIL...

...那么如何把这两种类型的数据分别读入并且存储在数组当中呢_百度知 ...
比如文件中存放了N行数据,每行为一个学生的姓名 及学生的成绩;N<100;姓名最多四字;则可以用以下方法进行读取:include <stdio.h>int main(){ char students[100][9]; \/\/存姓名 int score[100]; \/\/存成绩 int n ; \/\/记录读出多少人 int i; FILE* fp = fopen(...

跪求!!!devc++程序运行后产生的结果数据多,能不能全部都看到_百度知 ...
方法1:用命令行启动可执行文件。例如可执行文件是helloworld.exe,那么就 helloworld.exe > abcde.txt回车。方法2:用fprintf代替printf。

C++语言编程 输入数据有多组。每组输入数据包括一个整数N和N个整数...
void main(void){ while (true) { int n;scanf("%d", &n);if (n == 0)break;int s = 0;while (n--){ int x;scanf("%d", &x);s += x;} printf("%d\\n", s);} }

CFile在C++中是怎么用的,是什么意思?
如果你要进行的文件操作只是简单的读写整行的字符串,我建议你使用CStdioFile,用它来进行此类操作非常方便,如下例。CStdioFile mFile;CFileException mExcept;mFile.Open( "d:\\\\temp\\\\aa.bat", CFile::modeWrite, &mExcept);CString string="I am a string.";mFile.WriteString(string);mFile....

请问linux下,gcc编译程序的过程(从读取源文件到制作可执行程序中间所有...
-E 选项指示编译器仅对输入文件进行预 处理. 当这个选项被使用时, 预处理器的输出被送到标准输出而不是储存在文件里。优化选项 当你用 GCC 编译 C 代码时, 它会试着用最少的时间完成编译并且使编译后的 代码易于调试. 易于调试意味着编译后的代码与源代码有同样的执行次序, 编译后 的代码没有经过优化. ...

什么宏电脑电脑中的宏是什么
2、应急处理方法:用写字板或WORD 6.0文档作为清除宏病毒的桥梁。如果您的WORD系统没有感染宏病毒,但需要打开某个外来的、已查出感染有宏病毒的文档,而手头现有的反病毒软件又无法查杀它们,那么您可以试验用下面的方法来查杀文档中的宏病毒:打开这个包含了宏病毒的文档(当然是启用WORD中的“宏病毒防护”功能并在宏...

简答题 java用什么api实现大量数据读取内存,饼保证数据处理性能
在处理数据层面,如从数据库中读取数据,生成本地文件,写代码为了方便,我们未必要1M怎么来处理,这个交给底层的驱动程序去拆分,对于我们的程序来讲我们认为它是连续写即可;我们比如想将一个1000W数据的数据库表,导出到文件;此时,你要么进行分页,oracle当然用三层包装即可,mysql用limit,不过分页每次都会新的查询,而且随着...

一文搞懂大数据批量处理框架Spring Batch的完美解析方案是什么。_百度...
Step表示作业中的一个完整步骤,一个Job可以有一个或者多个Step组成。批处理框架运行期的模型也非常简单:JobInstance(作业实例)是一个运行期的概念,Job每执行一次都会涉及到一个JobInstance。JobInstance来源可能有两种:一种是根据设置的JobParameters从JobRepository(作业仓库)中获取一个;如果根据JobParameters从Job...

用c++编 能够录入学生信息,包括(学号、姓名、性别、身高、成绩等)并且...
\/\/|FileName:Maim.cpp \/\/|Authro:AnubiEnvoy \/\/|Introduction:\/\/|DateCreated:\/\/|DateCompleted:\/\/|DateAmend:\/\/+=== include"Student.h"float g_fHighestValue = 0.0f; \/\/最高分 float g_fClassAverage = 0.0f; \/\/全班平均成绩 unsigned int g_nNumOfStu = 0;CStudent *pArray =...

相似回答