您的位置:首页 > 编程语言 > C语言/C++

C和C++分别读取文本文件的方式

2010-11-10 22:03 274 查看
在我们的工作学习中,经常涉及到读取文本文件的操作,其实这些简单的常用操作我们应当熟记于心。

本文分别列举了C和C++下按照每行的格式读取文本文件,其中C++的实现中将单词以空格为分隔符输出,可以看到C++对字符串的处理确实要强大一些。

c实现:
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#define MAX_LINE 500

int main(int argc, char** argv)
{
//read from file
FILE* fp;
if ((fp=fopen("data.txt","r")) == NULL)
{
printf("open file error/n");
_exit(-127);
}
char line[MAX_LINE];
while (fgets(line,sizeof(line),fp) != NULL)
{
printf("%s/n",line);
memset(line,0,sizeof(line));
}
fclose(fp);
return 0;
}


c++实现:

#include <unistd.h>
#include <iostream>
#include <fstream>
#include <sstream>
#define MAX_LINE 500
using namespace std;

int main(int argc, char** argv)
{
//read from file
ifstream fin("data.txt");
if (fin.fail())
{
cerr << "open file error" << endl;
_exit(-127);
}
string line,word;
while (std::getline(fin,line))
{
stringstream stream(line);
while (stream >> word)
cout << "word:" << word << endl;
}
fin.close();
return 0;
}


补充getline函数知识:

对于下面这个程序
#include <iostream>
#include <cstring>
#include <string>
using namespace std;

int main()
{
string str;
char charr[20];
cin.getline(charr,20);
getline(cin,str);

cout<<charr<<endl;
cout<<str<<endl;

return 0;
}


1、两个函数虽然看上去名称相同都是getline,但它们有所不同。
cin.getline(charr,20);的getline是输入流对象的成员函数,即istream::getline,使用时需头文件 #include <iostream>;getline(cin,str);的getline是std名字空间下的库函数,即std::getline,使用时需头文件 #include <string>。

2、string类的getline(cin,str);中第一个参数要求是一个输入流对象的引用,即istream&,第二个参数则是一个string类的对象。这里cin就是C++内部定义的一个全局的输入流对象,即extern istream cin,str是定义的string类对象。

C++:
istream::getline(char* szLine, size_t sizeof(szLine));
istream::getline(char* szLine, size_t count, char delim);
STL:
getline(cin, string& sLine);
getline(cin, string& sLine, char delim);

C:
getline(char* szLine, size_t sizeof(szLine), FILE* fp);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: