我正在尝试读取包含标题和作者列表的文件,我需要能够忽略分隔文件中每一行的换行符。
例如,我的.txt文件可能有这样的列表:
自私基因
理查德道金斯一个勇敢的新世界
Aldous Huxley
太阳也升起
欧内斯特·海明威
我必须使用并行数组来存储这些信息,然后才能像这样格式化数据:
自私基因(Richard Dawkins)
我试图用 getline 来读取数据,但是当我去格式化标题和作者时,我得到了这个:
自私基因
(理查德道金斯
)
当我从文件中读取列表时,如何忽略换行符?
这是我到目前为止所做的:
int loadData(string pathname)
{
string bookTitle[100];
string bookAuthor[100];
ifstream inFile;
int count = -1; //count number of books
int i; //for variable
inFile.open(pathname.c_str());
{
for (i = 0; i < 100; i++)
{
if(inFile)
{
getline(inFile, bookTitle[i]);
getline(inFile, bookAuthor[i]);
count++;
}
}
inFile.close();
return count;
}
我非常感谢任何帮助!
理查德
编辑:
这是我的输出功能:
void showall(int count)
{
int j; //access array up until the amount of books
for(j = 0; j < count; j++)
{
cout << bookTitle[j] << " (" << bookAuthor[j] << ")";
cout << endl;
}
}
我在这里做错了吗?
答案 0 :(得分:2)
正如@Potatoswatter所说,std::getline
通常会删除换行符。如果换行仍在进行中,您可能正在使用一个系统,该系统使用\n
作为换行符,但您的文件有\r\n
个换行符。
在添加到字符串后删除额外的换行符。你可以用以下的东西来做到这一点:
s.erase(std::find_if(s.rbegin(), s.rend(), std::not1(std::isspace)).base(), s.end());
或类似的。您会在std::find_if
中找到<algorithm>
,在std::isspace
中找到<clocale>
,在std::not1
找到<functional>
。
答案 1 :(得分:0)
我知道了!问题是我正在阅读的文件。我使用.txt中的标题和作者复制并粘贴了文件,我的教师将我们放到了一个新的.txt文件中,现在它的工作方式很好!谢谢大家的帮助!!