请问如何把文本文件的一行作为一个string来读取?

时间:2023-02-11 08:41:10
不支持getline函数。
这一行中包括空格、‘tab'符、字母等等。

11 个解决方案

#1


gets

#2


fgets    从流中取字符串
调用格式 #include<stdio.h>
         char *fgets(char *s,int n,FILE *stream);
原型在   stdio.h
说明     fgets从参数stream指定的流中读入字符并存到参数s所指的串中。当读了n-1(n为参数)个字符或遇到一个换行符时,此函数停止读。fgets在串s
尾部保留换行符,并把一个空字符加在串后以表示串结束。
返回值   若调用成功,fgets返回由s所指的串,若遇到文件结束或发生错误,则返回空指针。
可移植性 fgets适用于UNIX系统,在ANSI C中定义。它在Kernighan和Ritchie中也作了定义。

#3


string应该是C++的吧,用istream::getline或者getline都可以。

#4


定义一个最长字符串,和文本文件一行一样长,并赋予每个元素为字符串结束
符号‘0’,然后逐个把每行读取到字符串中,用fgets(char *s,int n,file *filepoint).输出就行了

#5


我写个函数给你:

1、你先把你的全部文体全部读入到一个string中。
2、用下而后的函数,用一次读一行。

string GetLine(const string& AllString);//AllString就是你读入的所有文本
int StartPos = 0; //记录一笔记录中指针现在的位置
string GetLine(const string& AllString)
{
string TempString;
int EndPos = 0;
unsigned int n= AllString.length();
if((StartPos >= 0) && (StartPos < n))
{
EndPos= AllString.find_first_of ("\n",StartPos);
if ((EndPos < 0) && (EndPos > n))
EndPos = n;
TempString = AllString.substr(StartPos, EndPos - StartPos);
StartPos = EndPos+1 ;
//return TempString;
}
else TempString = "!!!out"; //如果读到尾了,没有东西可以读了,就输出结果"!!!out"
return  TempString; 
}

#6


char *fgets(char *s,int n,FILE *stream)为什么是char?string行不行?

#7


to cure(矿泉水):
 不是说了吗,用std::istream::getline或者std::getline都可以,直接支持std::string的。

#8


你是指标准C++吗?
string str1;
getline(cin,str1);

#9


是的。标准C++的这个函数也可的。

#pragma warning(disable:4786)
#include <string>
#include <iostream>

using namespace std ;

void main()
{
    string s1;
    cout << "Enter a sentence (use <space> as the delimiter):";
    getline(cin,s1, '\n');
    cout << "You entered: " << s1;
}

getline的最后一个参数指定遇到什么字符就中止读入。

#10


to: shornmao(死猫)
我的开贴写了,不支持getline。我用的c++ builder

#11


to 大家,getline虽然是标准,但编译器不支持也没办法。vc支持吗?
另外, alang_xy(浪人) ,你写的getline函数挺不错,建议宝蓝加到库里去吧。

#1


gets

#2


fgets    从流中取字符串
调用格式 #include<stdio.h>
         char *fgets(char *s,int n,FILE *stream);
原型在   stdio.h
说明     fgets从参数stream指定的流中读入字符并存到参数s所指的串中。当读了n-1(n为参数)个字符或遇到一个换行符时,此函数停止读。fgets在串s
尾部保留换行符,并把一个空字符加在串后以表示串结束。
返回值   若调用成功,fgets返回由s所指的串,若遇到文件结束或发生错误,则返回空指针。
可移植性 fgets适用于UNIX系统,在ANSI C中定义。它在Kernighan和Ritchie中也作了定义。

#3


string应该是C++的吧,用istream::getline或者getline都可以。

#4


定义一个最长字符串,和文本文件一行一样长,并赋予每个元素为字符串结束
符号‘0’,然后逐个把每行读取到字符串中,用fgets(char *s,int n,file *filepoint).输出就行了

#5


我写个函数给你:

1、你先把你的全部文体全部读入到一个string中。
2、用下而后的函数,用一次读一行。

string GetLine(const string& AllString);//AllString就是你读入的所有文本
int StartPos = 0; //记录一笔记录中指针现在的位置
string GetLine(const string& AllString)
{
string TempString;
int EndPos = 0;
unsigned int n= AllString.length();
if((StartPos >= 0) && (StartPos < n))
{
EndPos= AllString.find_first_of ("\n",StartPos);
if ((EndPos < 0) && (EndPos > n))
EndPos = n;
TempString = AllString.substr(StartPos, EndPos - StartPos);
StartPos = EndPos+1 ;
//return TempString;
}
else TempString = "!!!out"; //如果读到尾了,没有东西可以读了,就输出结果"!!!out"
return  TempString; 
}

#6


char *fgets(char *s,int n,FILE *stream)为什么是char?string行不行?

#7


to cure(矿泉水):
 不是说了吗,用std::istream::getline或者std::getline都可以,直接支持std::string的。

#8


你是指标准C++吗?
string str1;
getline(cin,str1);

#9


是的。标准C++的这个函数也可的。

#pragma warning(disable:4786)
#include <string>
#include <iostream>

using namespace std ;

void main()
{
    string s1;
    cout << "Enter a sentence (use <space> as the delimiter):";
    getline(cin,s1, '\n');
    cout << "You entered: " << s1;
}

getline的最后一个参数指定遇到什么字符就中止读入。

#10


to: shornmao(死猫)
我的开贴写了,不支持getline。我用的c++ builder

#11


to 大家,getline虽然是标准,但编译器不支持也没办法。vc支持吗?
另外, alang_xy(浪人) ,你写的getline函数挺不错,建议宝蓝加到库里去吧。