今晚在做题时遇到了关于string的读写问题,之前没有引起注意导致出错。
想从文件中读取一行字符串(含空格,如:where are you),先贴代码:
string s1;
ifstream fin("in.txt");
ofstream fout("out.txt");
for(int i=0;i<n;i++)
{
k1=0;
k2=0;
fin>>m1;
fin>>s1;
//出错行
for(int j=0;j<s1.size();j++)
{
if(s1[j]>='A'&&s1[j]<='Z')
t1[k1++]=s1[j];
}
直接用fin>>s1读取时发现,只能读空格前的第一个字符串,而不能达到我读取整行的目的,查了资料才知道,用fin读取默认的是遇到空格则将空格前读入的字符串写入缓冲区,然后按照要求输出。这样就无法读取含空格的一整行。
解决方法一:使用getline()函数。
getline函数能够读取一整行字符串,直至换行,修改后的代码如下:
code:
string s1;
ifstream fin("in.txt");
getline(fin,s1);//这样即可以读取整行字符串
解决方法二:用字符数组代替string,即定义char s[N],同样使用getline函数
code:
char s[N];
ifstream fin("in.txt");
fin.getline(s,N);
以上两种均可以按行从文件中读取字符串。
PS:细节决定成败,不断总结才是进步之道